608060405234801562000010575f80fd5b50336040518060400160405280600a81526020017f6465666c6970726f7879000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f6465666c6970726f78790000000000000000000000000000000000000000000081525081600390816200008f919062000749565b508060049081620000a1919062000749565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000117575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200010e919062000870565b60405180910390fd5b62000128816200016c60201b60201c565b5062000166336200013e6200022f60201b60201c565b600a6200014c919062000a14565b60016200015a919062000a64565b6200023760201b60201c565b62000b4f565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002aa575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002a1919062000870565b60405180910390fd5b620002bd5f8383620002c160201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000315578060025f82825462000308919062000aae565b92505081905550620003e6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620003a1578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003989392919062000af9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200042f578060025f828254039250508190555062000479565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004d8919062000b34565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200056157607f821691505b6020821081036200057757620005766200051c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200059e565b620005e786836200059e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620006316200062b6200062584620005ff565b62000608565b620005ff565b9050919050565b5f819050919050565b6200064c8362000611565b620006646200065b8262000638565b848454620005aa565b825550505050565b5f90565b6200067a6200066c565b6200068781848462000641565b505050565b5b81811015620006ae57620006a25f8262000670565b6001810190506200068d565b5050565b601f821115620006fd57620006c7816200057d565b620006d2846200058f565b81016020851015620006e2578190505b620006fa620006f1856200058f565b8301826200068c565b50505b505050565b5f82821c905092915050565b5f6200071f5f198460080262000702565b1980831691505092915050565b5f6200073983836200070e565b9150826002028217905092915050565b6200075482620004e5565b67ffffffffffffffff81111562000770576200076f620004ef565b5b6200077c825462000549565b62000789828285620006b2565b5f60209050601f831160018114620007bf575f8415620007aa578287015190505b620007b685826200072c565b86555062000825565b601f198416620007cf866200057d565b5f5b82811015620007f857848901518255600182019150602085019450602081019050620007d1565b8683101562000818578489015162000814601f8916826200070e565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000858826200082d565b9050919050565b6200086a816200084c565b82525050565b5f602082019050620008855f8301846200085f565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200091557808604811115620008ed57620008ec6200088b565b5b6001851615620008fd5780820291505b80810290506200090d85620008b8565b9450620008cd565b94509492505050565b5f826200092f576001905062000a01565b816200093e575f905062000a01565b8160018114620009575760028114620009625762000998565b600191505062000a01565b60ff8411156200097757620009766200088b565b5b8360020a9150848211156200099157620009906200088b565b5b5062000a01565b5060208310610133831016604e8410600b8410161715620009d25782820a905083811115620009cc57620009cb6200088b565b5b62000a01565b620009e18484846001620008c4565b92509050818404811115620009fb57620009fa6200088b565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000a2082620005ff565b915062000a2d8362000a08565b925062000a5c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200091e565b905092915050565b5f62000a7082620005ff565b915062000a7d83620005ff565b925082820262000a8d81620005ff565b9150828204841483151762000aa75762000aa66200088b565b5b5092915050565b5f62000aba82620005ff565b915062000ac783620005ff565b925082820190508082111562000ae25762000ae16200088b565b5b92915050565b62000af381620005ff565b82525050565b5f60608201905062000b0e5f8301866200085f565b62000b1d602083018562000ae8565b62000b2c604083018462000ae8565b949350505050565b5f60208201905062000b495f83018462000ae8565b92915050565b6112718062000b5d5f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c806370a082311161009557806395d89b411161006457806395d89b411461025d578063a9059cbb1461027b578063dd62ed3e146102ab578063f2fde38b146102db576100f3565b806370a08231146101e9578063715018a61461021957806379cc6790146102235780638da5cb5b1461023f576100f3565b806323b872dd116100d157806323b872dd14610163578063313ce5671461019357806340c10f19146101b157806342966c68146101cd576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff6102f7565b60405161010c9190610ebf565b60405180910390f35b61012f600480360381019061012a9190610f70565b610387565b60405161013c9190610fc8565b60405180910390f35b61014d6103a9565b60405161015a9190610ff0565b60405180910390f35b61017d60048036038101906101789190611009565b6103b2565b60405161018a9190610fc8565b60405180910390f35b61019b6103e0565b6040516101a89190611074565b60405180910390f35b6101cb60048036038101906101c69190610f70565b6103e8565b005b6101e760048036038101906101e2919061108d565b6103fe565b005b61020360048036038101906101fe91906110b8565b610412565b6040516102109190610ff0565b60405180910390f35b610221610457565b005b61023d60048036038101906102389190610f70565b61046a565b005b61024761048a565b60405161025491906110f2565b60405180910390f35b6102656104b2565b6040516102729190610ebf565b60405180910390f35b61029560048036038101906102909190610f70565b610542565b6040516102a29190610fc8565b60405180910390f35b6102c560048036038101906102c0919061110b565b610564565b6040516102d29190610ff0565b60405180910390f35b6102f560048036038101906102f091906110b8565b6105e6565b005b60606003805461030690611176565b80601f016020809104026020016040519081016040528092919081815260200182805461033290611176565b801561037d5780601f106103545761010080835404028352916020019161037d565b820191905f5260205f20905b81548152906001019060200180831161036057829003601f168201915b5050505050905090565b5f8061039161066a565b905061039e818585610671565b600191505092915050565b5f600254905090565b5f806103bc61066a565b90506103c9858285610683565b6103d4858585610715565b60019150509392505050565b5f6012905090565b6103f0610805565b6103fa828261088c565b5050565b61040f61040961066a565b8261090b565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61045f610805565b6104685f61098a565b565b61047c8261047661066a565b83610683565b610486828261090b565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104c190611176565b80601f01602080910402602001604051908101604052809291908181526020018280546104ed90611176565b80156105385780601f1061050f57610100808354040283529160200191610538565b820191905f5260205f20905b81548152906001019060200180831161051b57829003601f168201915b5050505050905090565b5f8061054c61066a565b9050610559818585610715565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6105ee610805565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361065e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161065591906110f2565b60405180910390fd5b6106678161098a565b50565b5f33905090565b61067e8383836001610a4d565b505050565b5f61068e8484610564565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461070f5781811015610700578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106f7939291906111a6565b60405180910390fd5b61070e84848484035f610a4d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610785575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161077c91906110f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107f5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107ec91906110f2565b60405180910390fd5b610800838383610c1c565b505050565b61080d61066a565b73ffffffffffffffffffffffffffffffffffffffff1661082b61048a565b73ffffffffffffffffffffffffffffffffffffffff161461088a5761084e61066a565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161088191906110f2565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108fc575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108f391906110f2565b60405180910390fd5b6109075f8383610c1c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361097b575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161097291906110f2565b60405180910390fd5b610986825f83610c1c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610abd575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ab491906110f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b2d575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b2491906110f2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610c16578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c0d9190610ff0565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c6c578060025f828254610c609190611208565b92505081905550610d3a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610cf5578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610cec939291906111a6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d81578060025f8282540392505081905550610dcb565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e289190610ff0565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610e6c578082015181840152602081019050610e51565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610e9182610e35565b610e9b8185610e3f565b9350610eab818560208601610e4f565b610eb481610e77565b840191505092915050565b5f6020820190508181035f830152610ed78184610e87565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f0c82610ee3565b9050919050565b610f1c81610f02565b8114610f26575f80fd5b50565b5f81359050610f3781610f13565b92915050565b5f819050919050565b610f4f81610f3d565b8114610f59575f80fd5b50565b5f81359050610f6a81610f46565b92915050565b5f8060408385031215610f8657610f85610edf565b5b5f610f9385828601610f29565b9250506020610fa485828601610f5c565b9150509250929050565b5f8115159050919050565b610fc281610fae565b82525050565b5f602082019050610fdb5f830184610fb9565b92915050565b610fea81610f3d565b82525050565b5f6020820190506110035f830184610fe1565b92915050565b5f805f606084860312156110205761101f610edf565b5b5f61102d86828701610f29565b935050602061103e86828701610f29565b925050604061104f86828701610f5c565b9150509250925092565b5f60ff82169050919050565b61106e81611059565b82525050565b5f6020820190506110875f830184611065565b92915050565b5f602082840312156110a2576110a1610edf565b5b5f6110af84828501610f5c565b91505092915050565b5f602082840312156110cd576110cc610edf565b5b5f6110da84828501610f29565b91505092915050565b6110ec81610f02565b82525050565b5f6020820190506111055f8301846110e3565b92915050565b5f806040838503121561112157611120610edf565b5b5f61112e85828601610f29565b925050602061113f85828601610f29565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061118d57607f821691505b6020821081036111a05761119f611149565b5b50919050565b5f6060820190506111b95f8301866110e3565b6111c66020830185610fe1565b6111d36040830184610fe1565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61121282610f3d565b915061121d83610f3d565b9250828201905080821115611235576112346111db565b5b9291505056fea2646970667358221220142bb6a621d0f1aa64dc132a5898fbdf244ad6a9426308410c33f7d8b4393b0064736f6c63430008160033