0x60806040523480156200001157600080fd5b506040518060400160405280600481526020017f48617461000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f485400000000000000000000000000000000000000000000000000000000000081525081600390816200008f91906200065d565b508060049081620000a191906200065d565b505050620000e333620000b9620000fe60201b60201c565b600a620000c79190620008d4565b620186a0620000d7919062000925565b6200010760201b60201c565b620000f86000801b336200027460201b60201c565b62000a5c565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017090620009d1565b60405180910390fd5b6200018d600083836200036660201b60201c565b8060026000828254620001a19190620009f3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000254919062000a3f565b60405180910390a362000270600083836200036b60201b60201c565b5050565b6200028682826200037060201b60201c565b620003625760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000307620003db60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200046557607f821691505b6020821081036200047b576200047a6200041d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004e57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004a6565b620004f18683620004a6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200053e62000538620005328462000509565b62000513565b62000509565b9050919050565b6000819050919050565b6200055a836200051d565b62000572620005698262000545565b848454620004b3565b825550505050565b600090565b620005896200057a565b620005968184846200054f565b505050565b5b81811015620005be57620005b26000826200057f565b6001810190506200059c565b5050565b601f8211156200060d57620005d78162000481565b620005e28462000496565b81016020851015620005f2578190505b6200060a620006018562000496565b8301826200059b565b50505b505050565b600082821c905092915050565b6000620006326000198460080262000612565b1980831691505092915050565b60006200064d83836200061f565b9150826002028217905092915050565b6200066882620003e3565b67ffffffffffffffff811115620006845762000683620003ee565b5b6200069082546200044c565b6200069d828285620005c2565b600060209050601f831160018114620006d55760008415620006c0578287015190505b620006cc85826200063f565b8655506200073c565b601f198416620006e58662000481565b60005b828110156200070f57848901518255600182019150602085019450602081019050620006e8565b868310156200072f57848901516200072b601f8916826200061f565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007d257808604811115620007aa57620007a962000744565b5b6001851615620007ba5780820291505b8081029050620007ca8562000773565b94506200078a565b94509492505050565b600082620007ed5760019050620008c0565b81620007fd5760009050620008c0565b8160018114620008165760028114620008215762000857565b6001915050620008c0565b60ff84111562000836576200083562000744565b5b8360020a91508482111562000850576200084f62000744565b5b50620008c0565b5060208310610133831016604e8410600b8410161715620008915782820a9050838111156200088b576200088a62000744565b5b620008c0565b620008a0848484600162000780565b92509050818404811115620008ba57620008b962000744565b5b81810290505b9392505050565b600060ff82169050919050565b6000620008e18262000509565b9150620008ee83620008c7565b92506200091d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007db565b905092915050565b6000620009328262000509565b91506200093f8362000509565b92508282026200094f8162000509565b9150828204841483151762000969576200096862000744565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620009b9601f8362000970565b9150620009c68262000981565b602082019050919050565b60006020820190508181036000830152620009ec81620009aa565b9050919050565b600062000a008262000509565b915062000a0d8362000509565b925082820190508082111562000a285762000a2762000744565b5b92915050565b62000a398162000509565b82525050565b600060208201905062000a56600083018462000a2e565b92915050565b611ec58062000a6c6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806339509351116100a2578063a217fddf11610071578063a217fddf1461031b578063a457c2d714610339578063a9059cbb14610369578063d547741f14610399578063dd62ed3e146103b557610116565b8063395093511461026d57806370a082311461029d57806391d14854146102cd57806395d89b41146102fd57610116565b806323b872dd116100e957806323b872dd146101b7578063248a9ca3146101e75780632f2ff15d14610217578063313ce5671461023357806336568abe1461025157610116565b806301ffc9a71461011b57806306fdde031461014b578063095ea7b31461016957806318160ddd14610199575b600080fd5b61013560048036038101906101309190611348565b6103e5565b6040516101429190611390565b60405180910390f35b61015361045f565b604051610160919061143b565b60405180910390f35b610183600480360381019061017e91906114f1565b6104f1565b6040516101909190611390565b60405180910390f35b6101a1610514565b6040516101ae9190611540565b60405180910390f35b6101d160048036038101906101cc919061155b565b61051e565b6040516101de9190611390565b60405180910390f35b61020160048036038101906101fc91906115e4565b61054d565b60405161020e9190611620565b60405180910390f35b610231600480360381019061022c919061163b565b61056d565b005b61023b61058e565b6040516102489190611697565b60405180910390f35b61026b6004803603810190610266919061163b565b610597565b005b610287600480360381019061028291906114f1565b61061a565b6040516102949190611390565b60405180910390f35b6102b760048036038101906102b291906116b2565b610651565b6040516102c49190611540565b60405180910390f35b6102e760048036038101906102e2919061163b565b610699565b6040516102f49190611390565b60405180910390f35b610305610704565b604051610312919061143b565b60405180910390f35b610323610796565b6040516103309190611620565b60405180910390f35b610353600480360381019061034e91906114f1565b61079d565b6040516103609190611390565b60405180910390f35b610383600480360381019061037e91906114f1565b610814565b6040516103909190611390565b60405180910390f35b6103b360048036038101906103ae919061163b565b610837565b005b6103cf60048036038101906103ca91906116df565b610858565b6040516103dc9190611540565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104585750610457826108df565b5b9050919050565b60606003805461046e9061174e565b80601f016020809104026020016040519081016040528092919081815260200182805461049a9061174e565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b6000806104fc610949565b9050610509818585610951565b600191505092915050565b6000600254905090565b600080610529610949565b9050610536858285610b1a565b610541858585610ba6565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6105768261054d565b61057f81610e1c565b6105898383610e30565b505050565b60006012905090565b61059f610949565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906117f1565b60405180910390fd5b6106168282610f11565b5050565b600080610625610949565b90506106468185856106378589610858565b6106419190611840565b610951565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546107139061174e565b80601f016020809104026020016040519081016040528092919081815260200182805461073f9061174e565b801561078c5780601f106107615761010080835404028352916020019161078c565b820191906000526020600020905b81548152906001019060200180831161076f57829003601f168201915b5050505050905090565b6000801b81565b6000806107a8610949565b905060006107b68286610858565b9050838110156107fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f2906118e6565b60405180910390fd5b6108088286868403610951565b60019250505092915050565b60008061081f610949565b905061082c818585610ba6565b600191505092915050565b6108408261054d565b61084981610e1c565b6108538383610f11565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b790611978565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2690611a0a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b0d9190611540565b60405180910390a3505050565b6000610b268484610858565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ba05781811015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990611a76565b60405180910390fd5b610b9f8484848403610951565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90611b08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611b9a565b60405180910390fd5b610c8f838383610ff3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90611c2c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e039190611540565b60405180910390a3610e16848484610ff8565b50505050565b610e2d81610e28610949565b610ffd565b50565b610e3a8282610699565b610f0d5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610eb2610949565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610f1b8282610699565b15610fef5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f94610949565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b505050565b505050565b6110078282610699565b61107e5761101481611082565b6110228360001c60206110af565b604051602001611033929190611d20565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611075919061143b565b60405180910390fd5b5050565b60606110a88273ffffffffffffffffffffffffffffffffffffffff16601460ff166110af565b9050919050565b6060600060028360026110c29190611d5a565b6110cc9190611840565b67ffffffffffffffff8111156110e5576110e4611d9c565b5b6040519080825280601f01601f1916602001820160405280156111175781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061114f5761114e611dcb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106111b3576111b2611dcb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026111f39190611d5a565b6111fd9190611840565b90505b600181111561129d577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061123f5761123e611dcb565b5b1a60f81b82828151811061125657611255611dcb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061129690611dfa565b9050611200565b50600084146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890611e6f565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611325816112f0565b811461133057600080fd5b50565b6000813590506113428161131c565b92915050565b60006020828403121561135e5761135d6112eb565b5b600061136c84828501611333565b91505092915050565b60008115159050919050565b61138a81611375565b82525050565b60006020820190506113a56000830184611381565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113e55780820151818401526020810190506113ca565b60008484015250505050565b6000601f19601f8301169050919050565b600061140d826113ab565b61141781856113b6565b93506114278185602086016113c7565b611430816113f1565b840191505092915050565b600060208201905081810360008301526114558184611402565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114888261145d565b9050919050565b6114988161147d565b81146114a357600080fd5b50565b6000813590506114b58161148f565b92915050565b6000819050919050565b6114ce816114bb565b81146114d957600080fd5b50565b6000813590506114eb816114c5565b92915050565b60008060408385031215611508576115076112eb565b5b6000611516858286016114a6565b9250506020611527858286016114dc565b9150509250929050565b61153a816114bb565b82525050565b60006020820190506115556000830184611531565b92915050565b600080600060608486031215611574576115736112eb565b5b6000611582868287016114a6565b9350506020611593868287016114a6565b92505060406115a4868287016114dc565b9150509250925092565b6000819050919050565b6115c1816115ae565b81146115cc57600080fd5b50565b6000813590506115de816115b8565b92915050565b6000602082840312156115fa576115f96112eb565b5b6000611608848285016115cf565b91505092915050565b61161a816115ae565b82525050565b60006020820190506116356000830184611611565b92915050565b60008060408385031215611652576116516112eb565b5b6000611660858286016115cf565b9250506020611671858286016114a6565b9150509250929050565b600060ff82169050919050565b6116918161167b565b82525050565b60006020820190506116ac6000830184611688565b92915050565b6000602082840312156116c8576116c76112eb565b5b60006116d6848285016114a6565b91505092915050565b600080604083850312156116f6576116f56112eb565b5b6000611704858286016114a6565b9250506020611715858286016114a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061176657607f821691505b6020821081036117795761177861171f565b5b50919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006117db602f836113b6565b91506117e68261177f565b604082019050919050565b6000602082019050818103600083015261180a816117ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061184b826114bb565b9150611856836114bb565b925082820190508082111561186e5761186d611811565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006118d06025836113b6565b91506118db82611874565b604082019050919050565b600060208201905081810360008301526118ff816118c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006119626024836113b6565b915061196d82611906565b604082019050919050565b6000602082019050818103600083015261199181611955565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006119f46022836113b6565b91506119ff82611998565b604082019050919050565b60006020820190508181036000830152611a23816119e7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611a60601d836113b6565b9150611a6b82611a2a565b602082019050919050565b60006020820190508181036000830152611a8f81611a53565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611af26025836113b6565b9150611afd82611a96565b604082019050919050565b60006020820190508181036000830152611b2181611ae5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b846023836113b6565b9150611b8f82611b28565b604082019050919050565b60006020820190508181036000830152611bb381611b77565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611c166026836113b6565b9150611c2182611bba565b604082019050919050565b60006020820190508181036000830152611c4581611c09565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611c8d601783611c4c565b9150611c9882611c57565b601782019050919050565b6000611cae826113ab565b611cb88185611c4c565b9350611cc88185602086016113c7565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611d0a601183611c4c565b9150611d1582611cd4565b601182019050919050565b6000611d2b82611c80565b9150611d378285611ca3565b9150611d4282611cfd565b9150611d4e8284611ca3565b91508190509392505050565b6000611d65826114bb565b9150611d70836114bb565b9250828202611d7e816114bb565b91508282048414831517611d9557611d94611811565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611e05826114bb565b915060008203611e1857611e17611811565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000611e596020836113b6565b9150611e6482611e23565b602082019050919050565b60006020820190508181036000830152611e8881611e4c565b905091905056fea2646970667358221220f27293b436e9f95b8dc8ad28ae271d3e37104c94310d86ee4317719a1217512964736f6c63430008120033