60806040526001600560146101000a81548160ff0219169083151502179055503480156200002b575f80fd5b50336040518060400160405280600b81526020017f50657069746f20436f696e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f50455049544f00000000000000000000000000000000000000000000000000008152508160039081620000aa919062000a18565b508060049081620000bc919062000a18565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000132575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000129919062000b3f565b60405180910390fd5b62000143816200016660201b60201c565b50620001603369152d02c7e14af68000006200022960201b60201c565b62000dea565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200029c575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000293919062000b3f565b60405180910390fd5b620002af5f8383620002b360201b60201c565b5050565b620002c68383836200051a60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620003e7576200032b6200073e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806200039f5750620003706200073e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b620003e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d89062000bde565b60405180910390fd5b62000515565b600560149054906101000a900460ff1680156200043f57506200040f6200073e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801562000499575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1562000514576101f4620004b26200076660201b60201c565b620004be919062000c58565b620004cf836200076f60201b60201c565b111562000513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050a9062000d29565b60405180910390fd5b5b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200056e578060025f82825462000561919062000d49565b925050819055506200063f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620005fa578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620005f19392919062000d94565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000688578060025f8282540392505081905550620006d2565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000731919062000dcf565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600254905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200083057607f821691505b602082108103620008465762000845620007eb565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200086d565b620008b686836200086d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000900620008fa620008f484620008ce565b620008d7565b620008ce565b9050919050565b5f819050919050565b6200091b83620008e0565b620009336200092a8262000907565b84845462000879565b825550505050565b5f90565b620009496200093b565b6200095681848462000910565b505050565b5b818110156200097d57620009715f826200093f565b6001810190506200095c565b5050565b601f821115620009cc5762000996816200084c565b620009a1846200085e565b81016020851015620009b1578190505b620009c9620009c0856200085e565b8301826200095b565b50505b505050565b5f82821c905092915050565b5f620009ee5f1984600802620009d1565b1980831691505092915050565b5f62000a088383620009dd565b9150826002028217905092915050565b62000a2382620007b4565b67ffffffffffffffff81111562000a3f5762000a3e620007be565b5b62000a4b825462000818565b62000a5882828562000981565b5f60209050601f83116001811462000a8e575f841562000a79578287015190505b62000a858582620009fb565b86555062000af4565b601f19841662000a9e866200084c565b5f5b8281101562000ac75784890151825560018201915060208501945060208101905062000aa0565b8683101562000ae7578489015162000ae3601f891682620009dd565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b278262000afc565b9050919050565b62000b398162000b1b565b82525050565b5f60208201905062000b545f83018462000b2e565b92915050565b5f82825260208201905092915050565b7f50617469656e6365202d2054726164696e67204e6f74205374617274656420595f8201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b5f62000bc660238362000b5a565b915062000bd38262000b6a565b604082019050919050565b5f6020820190508181035f83015262000bf78162000bb8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c6482620008ce565b915062000c7183620008ce565b92508262000c845762000c8362000bfe565b5b828204905092915050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f665f8201527f20302e3225206f662050455049544f20756e74696c204c75627269636174696f60208201527f6e20697320636f6d706c65746521000000000000000000000000000000000000604082015250565b5f62000d11604e8362000b5a565b915062000d1e8262000c8f565b606082019050919050565b5f6020820190508181035f83015262000d428162000d03565b9050919050565b5f62000d5582620008ce565b915062000d6283620008ce565b925082820190508082111562000d7d5762000d7c62000c2b565b5b92915050565b62000d8e81620008ce565b82525050565b5f60608201905062000da95f83018662000b2e565b62000db8602083018562000d83565b62000dc7604083018462000d83565b949350505050565b5f60208201905062000de45f83018462000d83565b92915050565b6116158062000df85f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c806370a08231116100a057806395d89b411161006f57806395d89b4114610293578063a9059cbb146102b1578063dd62ed3e146102e1578063e14f08d514610311578063f2fde38b1461031b57610109565b806370a082311461021d578063715018a61461024d5780638da5cb5b1461025757806395afda0c1461027557610109565b806323b872dd116100dc57806323b872dd14610195578063313ce567146101c55780634bc3e7db146101e3578063665a11ca146101ff57610109565b8063018770201461010d57806306fdde0314610129578063095ea7b31461014757806318160ddd14610177575b5f80fd5b6101276004803603810190610122919061106e565b610337565b005b610131610382565b60405161013e9190611123565b60405180910390f35b610161600480360381019061015c9190611176565b610412565b60405161016e91906111ce565b60405180910390f35b61017f610434565b60405161018c91906111f6565b60405180910390f35b6101af60048036038101906101aa919061120f565b61043d565b6040516101bc91906111ce565b60405180910390f35b6101cd61046b565b6040516101da919061127a565b60405180910390f35b6101fd60048036038101906101f891906112bd565b610473565b005b610207610498565b60405161021491906112f7565b60405180910390f35b6102376004803603810190610232919061106e565b6104bd565b60405161024491906111f6565b60405180910390f35b610255610502565b005b61025f610515565b60405161026c91906112f7565b60405180910390f35b61027d61053d565b60405161028a91906111ce565b60405180910390f35b61029b610550565b6040516102a89190611123565b60405180910390f35b6102cb60048036038101906102c69190611176565b6105e0565b6040516102d891906111ce565b60405180910390f35b6102fb60048036038101906102f69190611310565b610602565b60405161030891906111f6565b60405180910390f35b610319610684565b005b6103356004803603810190610330919061106e565b610696565b005b61033f61071a565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600380546103919061137b565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd9061137b565b80156104085780601f106103df57610100808354040283529160200191610408565b820191905f5260205f20905b8154815290600101906020018083116103eb57829003601f168201915b5050505050905090565b5f8061041c6107a1565b90506104298185856107a8565b600191505092915050565b5f600254905090565b5f806104476107a1565b90506104548582856107ba565b61045f85858561084c565b60019150509392505050565b5f6012905090565b61047b61071a565b80600560146101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61050a61071a565b6105135f61093c565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560149054906101000a900460ff1681565b60606004805461055f9061137b565b80601f016020809104026020016040519081016040528092919081815260200182805461058b9061137b565b80156105d65780601f106105ad576101008083540402835291602001916105d6565b820191905f5260205f20905b8154815290600101906020018083116105b957829003601f168201915b5050505050905090565b5f806105ea6107a1565b90506105f781858561084c565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61068c61071a565b610694610502565b565b61069e61071a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361070e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161070591906112f7565b60405180910390fd5b6107178161093c565b50565b6107226107a1565b73ffffffffffffffffffffffffffffffffffffffff16610740610515565b73ffffffffffffffffffffffffffffffffffffffff161461079f576107636107a1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161079691906112f7565b60405180910390fd5b565b5f33905090565b6107b583838360016109ff565b505050565b5f6107c58484610602565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108465781811015610837578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161082e939291906113ab565b60405180910390fd5b61084584848484035f6109ff565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108bc575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108b391906112f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361092c575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161092391906112f7565b60405180910390fd5b610937838383610bce565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a6f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a6691906112f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610adf575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ad691906112f7565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610bc8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bbf91906111f6565b60405180910390a35b50505050565b610bd9838383610df7565b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ce457610c35610515565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ca05750610c71610515565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690611450565b60405180910390fd5b610df2565b600560149054906101000a900460ff168015610d335750610d03610515565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610d8c575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610df1576101f4610d9c610434565b610da691906114c8565b610daf836104bd565b1115610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de79061158e565b60405180910390fd5b5b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e47578060025f828254610e3b91906115ac565b92505081905550610f15565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610ed0578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ec7939291906113ab565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f5c578060025f8282540392505081905550610fa6565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161100391906111f6565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61103d82611014565b9050919050565b61104d81611033565b8114611057575f80fd5b50565b5f8135905061106881611044565b92915050565b5f6020828403121561108357611082611010565b5b5f6110908482850161105a565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156110d05780820151818401526020810190506110b5565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6110f582611099565b6110ff81856110a3565b935061110f8185602086016110b3565b611118816110db565b840191505092915050565b5f6020820190508181035f83015261113b81846110eb565b905092915050565b5f819050919050565b61115581611143565b811461115f575f80fd5b50565b5f813590506111708161114c565b92915050565b5f806040838503121561118c5761118b611010565b5b5f6111998582860161105a565b92505060206111aa85828601611162565b9150509250929050565b5f8115159050919050565b6111c8816111b4565b82525050565b5f6020820190506111e15f8301846111bf565b92915050565b6111f081611143565b82525050565b5f6020820190506112095f8301846111e7565b92915050565b5f805f6060848603121561122657611225611010565b5b5f6112338682870161105a565b93505060206112448682870161105a565b925050604061125586828701611162565b9150509250925092565b5f60ff82169050919050565b6112748161125f565b82525050565b5f60208201905061128d5f83018461126b565b92915050565b61129c816111b4565b81146112a6575f80fd5b50565b5f813590506112b781611293565b92915050565b5f602082840312156112d2576112d1611010565b5b5f6112df848285016112a9565b91505092915050565b6112f181611033565b82525050565b5f60208201905061130a5f8301846112e8565b92915050565b5f806040838503121561132657611325611010565b5b5f6113338582860161105a565b92505060206113448582860161105a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061139257607f821691505b6020821081036113a5576113a461134e565b5b50919050565b5f6060820190506113be5f8301866112e8565b6113cb60208301856111e7565b6113d860408301846111e7565b949350505050565b7f50617469656e6365202d2054726164696e67204e6f74205374617274656420595f8201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b5f61143a6023836110a3565b9150611445826113e0565b604082019050919050565b5f6020820190508181035f8301526114678161142e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114d282611143565b91506114dd83611143565b9250826114ed576114ec61146e565b5b828204905092915050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f665f8201527f20302e3225206f662050455049544f20756e74696c204c75627269636174696f60208201527f6e20697320636f6d706c65746521000000000000000000000000000000000000604082015250565b5f611578604e836110a3565b9150611583826114f8565b606082019050919050565b5f6020820190508181035f8301526115a58161156c565b9050919050565b5f6115b682611143565b91506115c183611143565b92508282019050808211156115d9576115d861149b565b5b9291505056fea26469706673582212201e1d929808cdca96bb845a4fbc2222f9e223ca79b55c4b9e9f28938790e6517b64736f6c63430008180033