60806040523480156200001157600080fd5b506040516200456738038062004567833981810160405281019062000037919062001899565b876040518060400160405280600981526020017f474f524120434f494e00000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474f5241000000000000000000000000000000000000000000000000000000008152508160039081620000b5919062001be1565b508060049081620000c7919062001be1565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000136919062001cd9565b60405180910390fd5b62000150816200074060201b60201c565b50600882511462000198576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018f9062001d7d565b60405180910390fd5b620002a082600081518110620001b357620001b262001d9f565b5b602002602001015183600181518110620001d257620001d162001d9f565b5b602002602001015184600281518110620001f157620001f062001d9f565b5b60200260200101518560038151811062000210576200020f62001d9f565b5b6020026020010151866004815181106200022f576200022e62001d9f565b5b6020026020010151876005815181106200024e576200024d62001d9f565b5b6020026020010151886006815181106200026d576200026c62001d9f565b5b6020026020010151896007815181106200028c576200028b62001d9f565b5b60200260200101516200080660201b60201c565b60405180604001604052808760ff1681526020018660ff16815250600760008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555090505083600681905550600083905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000382919062001dce565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062001dce565b6040518363ffffffff1660e01b81526004016200042f92919062001e00565b6020604051808303816000875af11580156200044f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000475919062001dce565b905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b8351811015620006e95760016009600086848151811062000682576200068162001d9f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506200065c565b508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000730576200072f89620008fa60201b60201c565b5b50505050505050505050620021a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000824866b01480f5114944756d30000006200099360201b60201c565b62000841816a833953a1d4e955ee0000006200099360201b60201c565b6200085e886a419ca9d0ea74aaf70000006200099360201b60201c565b6200087b876a20ce54e8753a557b8000006200099360201b60201c565b62000899826b023e1acde4037cd7f14000006200099360201b60201c565b620008b6836aa407a88a4a23ab698000006200099360201b60201c565b620008d3846a626afeb95faf00728000006200099360201b60201c565b620008f0856af60b7ccf6f35811e4000006200099360201b60201c565b5050505050505050565b6200090a62000a2060201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200097f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000976919062001cd9565b60405180910390fd5b62000990816200074060201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a085760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620009ff919062001cd9565b60405180910390fd5b62000a1c6000838362000ac260201b60201c565b5050565b62000a3062000e6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a5662000e6e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000ac05762000a8262000e6660201b60201c565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040162000ab7919062001cd9565b60405180910390fd5b565b6000810362000ae55762000adf8383600062000e9860201b60201c565b62000e61565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000b555760019150600760000160019054906101000a900460ff1690505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000bc25760019150600760000160009054906101000a900460ff1690505b600060065462000bd830620010c860201b60201c565b11905080801562000bf65750600860009054906101000a900460ff16155b801562000c4d5750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801562000c95575062000c6562000e6e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801562000cdd575062000cad62000e6e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1562000d3b576001600860006101000a81548160ff02191690831515021790555062000d1f62000d1330620010c860201b60201c565b6200111060201b60201c565b6000600860006101000a81548160ff0219169083151502179055505b6000600860009054906101000a900460ff16159050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062000df25750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1562000dfd57600090505b80801562000e085750835b1562000e4957600062000e2286856200140f60201b60201c565b9050808662000e32919062001e5c565b955062000e4788308362000e9860201b60201c565b505b62000e5c87878762000e9860201b60201c565b505050505b505050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000eee57806002600082825462000ee1919062001e97565b9250508190555062000fc4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000f7d578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040162000f749392919062001ee3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200100f57806002600082825403925050819055506200105c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620010bb919062001f20565b60405180910390a3505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600267ffffffffffffffff81111562001130576200112f6200173a565b5b6040519080825280602002602001820160405280156200115f5781602001602082028036833780820191505090505b50905030816000815181106200117a576200117962001d9f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001222573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001248919062001dce565b816001815181106200125f576200125e62001d9f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050620012ce30600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846200143860201b60201c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401620013349594939291906200204e565b600060405180830381600087803b1580156200134f57600080fd5b505af115801562001364573d6000803e3d6000fd5b505050507f27f5e7f74573d62218b16aae1533d920e98dcf5eff93d71ed2a3b7eb2aa59ed582476200139b62000e6e60201b60201c565b604051620013ac93929190620020b2565b60405180910390a1620013c462000e6e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156200140a573d6000803e3d6000fd5b505050565b600060648260ff1684620014249190620020ef565b62001430919062002169565b905092915050565b6200144d83838360016200145260201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620014c75760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401620014be919062001cd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200153c5760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162001533919062001cd9565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156200162c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162001623919062001f20565b60405180910390a35b50505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620016738262001646565b9050919050565b620016858162001666565b81146200169157600080fd5b50565b600081519050620016a5816200167a565b92915050565b600060ff82169050919050565b620016c381620016ab565b8114620016cf57600080fd5b50565b600081519050620016e381620016b8565b92915050565b6000819050919050565b620016fe81620016e9565b81146200170a57600080fd5b50565b6000815190506200171e81620016f3565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620017748262001729565b810181811067ffffffffffffffff821117156200179657620017956200173a565b5b80604052505050565b6000620017ab62001632565b9050620017b9828262001769565b919050565b600067ffffffffffffffff821115620017dc57620017db6200173a565b5b602082029050602081019050919050565b600080fd5b6000620018096200180384620017be565b6200179f565b905080838252602082019050602084028301858111156200182f576200182e620017ed565b5b835b818110156200185c578062001847888262001694565b84526020840193505060208101905062001831565b5050509392505050565b600082601f8301126200187e576200187d62001724565b5b815162001890848260208601620017f2565b91505092915050565b600080600080600080600080610100898b031215620018bd57620018bc6200163c565b5b6000620018cd8b828c0162001694565b9850506020620018e08b828c0162001694565b9750506040620018f38b828c01620016d2565b9650506060620019068b828c01620016d2565b9550506080620019198b828c016200170d565b94505060a06200192c8b828c0162001694565b93505060c089015167ffffffffffffffff81111562001950576200194f62001641565b5b6200195e8b828c0162001866565b92505060e089015167ffffffffffffffff81111562001982576200198162001641565b5b620019908b828c0162001866565b9150509295985092959890939650565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620019f357607f821691505b60208210810362001a095762001a08620019ab565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262001a737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001a34565b62001a7f868362001a34565b95508019841693508086168417925050509392505050565b6000819050919050565b600062001ac262001abc62001ab684620016e9565b62001a97565b620016e9565b9050919050565b6000819050919050565b62001ade8362001aa1565b62001af662001aed8262001ac9565b84845462001a41565b825550505050565b600090565b62001b0d62001afe565b62001b1a81848462001ad3565b505050565b5b8181101562001b425762001b3660008262001b03565b60018101905062001b20565b5050565b601f82111562001b915762001b5b8162001a0f565b62001b668462001a24565b8101602085101562001b76578190505b62001b8e62001b858562001a24565b83018262001b1f565b50505b505050565b600082821c905092915050565b600062001bb66000198460080262001b96565b1980831691505092915050565b600062001bd1838362001ba3565b9150826002028217905092915050565b62001bec82620019a0565b67ffffffffffffffff81111562001c085762001c076200173a565b5b62001c148254620019da565b62001c2182828562001b46565b600060209050601f83116001811462001c59576000841562001c44578287015190505b62001c50858262001bc3565b86555062001cc0565b601f19841662001c698662001a0f565b60005b8281101562001c935784890151825560018201915060208501945060208101905062001c6c565b8683101562001cb3578489015162001caf601f89168262001ba3565b8355505b6001600288020188555050505b505050505050565b62001cd38162001666565b82525050565b600060208201905062001cf0600083018462001cc8565b92915050565b600082825260208201905092915050565b7f596f75206e65656420746f20696e666f726d2038206164647265737320746f2060008201527f6372656174652074686520636f6e74726163742e000000000000000000000000602082015250565b600062001d6560348362001cf6565b915062001d728262001d07565b604082019050919050565b6000602082019050818103600083015262001d988162001d56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121562001de75762001de66200163c565b5b600062001df78482850162001694565b91505092915050565b600060408201905062001e17600083018562001cc8565b62001e26602083018462001cc8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001e6982620016e9565b915062001e7683620016e9565b925082820390508181111562001e915762001e9062001e2d565b5b92915050565b600062001ea482620016e9565b915062001eb183620016e9565b925082820190508082111562001ecc5762001ecb62001e2d565b5b92915050565b62001edd81620016e9565b82525050565b600060608201905062001efa600083018662001cc8565b62001f09602083018562001ed2565b62001f18604083018462001ed2565b949350505050565b600060208201905062001f37600083018462001ed2565b92915050565b6000819050919050565b600062001f6862001f6262001f5c8462001f3d565b62001a97565b620016e9565b9050919050565b62001f7a8162001f47565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62001fb78162001666565b82525050565b600062001fcb838362001fac565b60208301905092915050565b6000602082019050919050565b600062001ff18262001f80565b62001ffd818562001f8b565b93506200200a8362001f9c565b8060005b838110156200204157815162002025888262001fbd565b9750620020328362001fd7565b9250506001810190506200200e565b5085935050505092915050565b600060a08201905062002065600083018862001ed2565b62002074602083018762001f6f565b818103604083015262002088818662001fe4565b905062002099606083018562001cc8565b620020a8608083018462001ed2565b9695505050505050565b6000606082019050620020c9600083018662001ed2565b620020d8602083018562001ed2565b620020e7604083018462001cc8565b949350505050565b6000620020fc82620016e9565b91506200210983620016e9565b92508282026200211981620016e9565b9150828204841483151762002133576200213262001e2d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200217682620016e9565b91506200218383620016e9565b9250826200219657620021956200213a565b5b828204905092915050565b6123b680620021b16000396000f3fe6080604052600436106101185760003560e01c806365b8dbc0116100a057806395d89b411161006457806395d89b4114610396578063a9059cbb146103c1578063c840b206146103fe578063dd62ed3e1461043b578063f2fde38b146104785761011f565b806365b8dbc0146102d757806370a0823114610300578063715018a61461033d5780638c8d81a0146103545780638da5cb5b1461036b5761011f565b806323b872dd116100e757806323b872dd146101e0578063313ce5671461021d57806332d236cc14610248578063336ad1b5146102715780634a769479146102ae5761011f565b8063010f1fda1461012457806306fdde031461014d578063095ea7b31461017857806318160ddd146101b55761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611bb7565b6104a1565b005b34801561015957600080fd5b50610162610552565b60405161016f9190611c87565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190611cdf565b6105e4565b6040516101ac9190611d2e565b60405180910390f35b3480156101c157600080fd5b506101ca610607565b6040516101d79190611d58565b60405180910390f35b3480156101ec57600080fd5b5061020760048036038101906102029190611d73565b610611565b6040516102149190611d2e565b60405180910390f35b34801561022957600080fd5b50610232610640565b60405161023f9190611de2565b60405180910390f35b34801561025457600080fd5b5061026f600480360381019061026a9190611dfd565b610649565b005b34801561027d57600080fd5b5061029860048036038101906102939190611e2a565b61065b565b6040516102a59190611d2e565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190611bb7565b6106b1565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190611e2a565b610762565b005b34801561030c57600080fd5b5061032760048036038101906103229190611e2a565b610af6565b6040516103349190611d58565b60405180910390f35b34801561034957600080fd5b50610352610b3e565b005b34801561036057600080fd5b50610369610b52565b005b34801561037757600080fd5b50610380610baa565b60405161038d9190611e66565b60405180910390f35b3480156103a257600080fd5b506103ab610bd4565b6040516103b89190611c87565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190611cdf565b610c66565b6040516103f59190611d2e565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190611e2a565b610c89565b6040516104329190611d2e565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190611e81565b610cdf565b60405161046f9190611d58565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190611e2a565b610d66565b005b6104a9610dec565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fc0b185562b450923c52a4ce1d3a37d7f86aa845584b092a954827eb424f8da06826040516105469190611d2e565b60405180910390a25050565b60606003805461056190611ef0565b80601f016020809104026020016040519081016040528092919081815260200182805461058d90611ef0565b80156105da5780601f106105af576101008083540402835291602001916105da565b820191906000526020600020905b8154815290600101906020018083116105bd57829003601f168201915b5050505050905090565b6000806105ef610e73565b90506105fc818585610e7b565b600191505092915050565b6000600254905090565b60008061061c610e73565b9050610629858285610e8d565b610634858585610f21565b60019150509392505050565b60006012905090565b610651610dec565b8060068190555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6106b9610dec565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ffdc626fc4b6f2c12f4e66cbb23bfada9306a934da1d29c628e5ad71f4be5d97a826040516107569190611d2e565b60405180910390a25050565b61076a610dec565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190611f93565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611fc8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190611fc8565b6040518363ffffffff1660e01b8152600401610a14929190611ff5565b6020604051808303816000875af1158015610a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a579190611fc8565b905080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b46610dec565b610b506000611015565b565b610b5a610dec565b610b62610baa565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ba7573d6000803e3d6000fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610be390611ef0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0f90611ef0565b8015610c5c5780601f10610c3157610100808354040283529160200191610c5c565b820191906000526020600020905b815481529060010190602001808311610c3f57829003601f168201915b5050505050905090565b600080610c71610e73565b9050610c7e818585610f21565b600191505092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d6e610dec565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610de05760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610dd79190611e66565b60405180910390fd5b610de981611015565b50565b610df4610e73565b73ffffffffffffffffffffffffffffffffffffffff16610e12610baa565b73ffffffffffffffffffffffffffffffffffffffff1614610e7157610e35610e73565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e689190611e66565b60405180910390fd5b565b600033905090565b610e8883838360016110db565b505050565b6000610e998484610cdf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f1b5781811015610f0b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610f029392919061201e565b60405180910390fd5b610f1a848484840360006110db565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f935760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f8a9190611e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110055760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ffc9190611e66565b60405180910390fd5b6110108383836112b2565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361114d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111449190611e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111bf5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111b69190611e66565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156112ac578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112a39190611d58565b60405180910390a35b50505050565b600081036112cb576112c6838360006115ff565b6115fa565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561133a5760019150600760000160019054906101000a900460ff1690505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113a65760019150600760000160009054906101000a900460ff1690505b60006006546113b430610af6565b1190508080156113d15750600860009054906101000a900460ff16155b80156114275750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156114665750611436610baa565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156114a55750611475610baa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156114f2576001600860006101000a81548160ff0219169083151502179055506114d66114d130610af6565b611824565b6000600860006101000a81548160ff0219169083151502179055505b6000600860009054906101000a900460ff16159050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806115a85750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156115b257600090505b8080156115bc5750835b156115ea5760006115cd8685611af7565b905080866115db9190612084565b95506115e88830836115ff565b505b6115f58787876115ff565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361165157806002600082825461164591906120b8565b92505081905550611724565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116dd578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016116d49392919061201e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176d57806002600082825403925050819055506117ba565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118179190611d58565b60405180910390a3505050565b6000600267ffffffffffffffff811115611841576118406120ec565b5b60405190808252806020026020018201604052801561186f5781602001602082028036833780820191505090505b50905030816000815181106118875761188661211b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561192e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119529190611fc8565b816001815181106119665761196561211b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506119cd30600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610e7b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611a3195949392919061224d565b600060405180830381600087803b158015611a4b57600080fd5b505af1158015611a5f573d6000803e3d6000fd5b505050507f27f5e7f74573d62218b16aae1533d920e98dcf5eff93d71ed2a3b7eb2aa59ed58247611a8e610baa565b604051611a9d939291906122a7565b60405180910390a1611aad610baa565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611af2573d6000803e3d6000fd5b505050565b600060648260ff1684611b0a91906122de565b611b14919061234f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b4c82611b21565b9050919050565b611b5c81611b41565b8114611b6757600080fd5b50565b600081359050611b7981611b53565b92915050565b60008115159050919050565b611b9481611b7f565b8114611b9f57600080fd5b50565b600081359050611bb181611b8b565b92915050565b60008060408385031215611bce57611bcd611b1c565b5b6000611bdc85828601611b6a565b9250506020611bed85828601611ba2565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c31578082015181840152602081019050611c16565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c5982611bf7565b611c638185611c02565b9350611c73818560208601611c13565b611c7c81611c3d565b840191505092915050565b60006020820190508181036000830152611ca18184611c4e565b905092915050565b6000819050919050565b611cbc81611ca9565b8114611cc757600080fd5b50565b600081359050611cd981611cb3565b92915050565b60008060408385031215611cf657611cf5611b1c565b5b6000611d0485828601611b6a565b9250506020611d1585828601611cca565b9150509250929050565b611d2881611b7f565b82525050565b6000602082019050611d436000830184611d1f565b92915050565b611d5281611ca9565b82525050565b6000602082019050611d6d6000830184611d49565b92915050565b600080600060608486031215611d8c57611d8b611b1c565b5b6000611d9a86828701611b6a565b9350506020611dab86828701611b6a565b9250506040611dbc86828701611cca565b9150509250925092565b600060ff82169050919050565b611ddc81611dc6565b82525050565b6000602082019050611df76000830184611dd3565b92915050565b600060208284031215611e1357611e12611b1c565b5b6000611e2184828501611cca565b91505092915050565b600060208284031215611e4057611e3f611b1c565b5b6000611e4e84828501611b6a565b91505092915050565b611e6081611b41565b82525050565b6000602082019050611e7b6000830184611e57565b92915050565b60008060408385031215611e9857611e97611b1c565b5b6000611ea685828601611b6a565b9250506020611eb785828601611b6a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f0857607f821691505b602082108103611f1b57611f1a611ec1565b5b50919050565b7f474f524120434f494e3a2054686520726f7574657220616c726561647920686160008201527f7320746861742061646472657373000000000000000000000000000000000000602082015250565b6000611f7d602e83611c02565b9150611f8882611f21565b604082019050919050565b60006020820190508181036000830152611fac81611f70565b9050919050565b600081519050611fc281611b53565b92915050565b600060208284031215611fde57611fdd611b1c565b5b6000611fec84828501611fb3565b91505092915050565b600060408201905061200a6000830185611e57565b6120176020830184611e57565b9392505050565b60006060820190506120336000830186611e57565b6120406020830185611d49565b61204d6040830184611d49565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061208f82611ca9565b915061209a83611ca9565b92508282039050818111156120b2576120b1612055565b5b92915050565b60006120c382611ca9565b91506120ce83611ca9565b92508282019050808211156120e6576120e5612055565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061217961217461216f8461214a565b612154565b611ca9565b9050919050565b6121898161215e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6121c481611b41565b82525050565b60006121d683836121bb565b60208301905092915050565b6000602082019050919050565b60006121fa8261218f565b612204818561219a565b935061220f836121ab565b8060005b8381101561224057815161222788826121ca565b9750612232836121e2565b925050600181019050612213565b5085935050505092915050565b600060a0820190506122626000830188611d49565b61226f6020830187612180565b818103604083015261228181866121ef565b90506122906060830185611e57565b61229d6080830184611d49565b9695505050505050565b60006060820190506122bc6000830186611d49565b6122c96020830185611d49565b6122d66040830184611e57565b949350505050565b60006122e982611ca9565b91506122f483611ca9565b925082820261230281611ca9565b9150828204841483151761231957612318612055565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061235a82611ca9565b915061236583611ca9565b92508261237557612374612320565b5b82820490509291505056fea26469706673582212201bbe3e3ddb94142324cbda6e14f4d559ac30d91c57c19862da0a6e2597ffccc964736f6c634300081800330000000000000000000000006a60495e3c5345d8bbf1ce04b20b93ede0d7d84c00000000000000000000000064bd06446bdc15a466e0323143f76f6d7de3a703000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000002b5e3af16b18800000000000000000000000000006682375ebc1df04676c0c5050934272368e6e8830000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000080000000000000000000000007411810d3b82c1be4d480ca94471cbc3c17f61e3000000000000000000000000038b629b3fa035d8259909650a0768f1dfb9072c000000000000000000000000c178548b79d9834cb67cfa6a940881c99b2864f8000000000000000000000000112ca765298d440f9a89fb02ee780a61e2e408230000000000000000000000000e838044a94fb0480c0caf74c4f75c8cb0f1154700000000000000000000000063693ea24b8bd7119e8d33ac1902e889db3af1690000000000000000000000000c278ef11ba68820dad53234e7b32a664dd02d1b000000000000000000000000ef712129522853923c784fe839169fd08f48020b000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000007411810d3b82c1be4d480ca94471cbc3c17f61e3000000000000000000000000038b629b3fa035d8259909650a0768f1dfb9072c000000000000000000000000c178548b79d9834cb67cfa6a940881c99b2864f8000000000000000000000000112ca765298d440f9a89fb02ee780a61e2e408230000000000000000000000000e838044a94fb0480c0caf74c4f75c8cb0f1154700000000000000000000000063693ea24b8bd7119e8d33ac1902e889db3af1690000000000000000000000000c278ef11ba68820dad53234e7b32a664dd02d1b000000000000000000000000ef712129522853923c784fe839169fd08f48020b00000000000000000000000064bd06446bdc15a466e0323143f76f6d7de3a7030000000000000000000000006682375ebc1df04676c0c5050934272368e6e883000000000000000000000000050e797f3625ec8785265e1d9bdd4799b97528a1