0x608060405234801561001057600080fd5b50600436106102ff5760003560e01c80638456cb591161019c578063c3cda520116100ee578063dc39d06d11610097578063f1127ed811610071578063f1127ed8146105e7578063f1b5c88e14610608578063f2fde38b1461061b576102ff565b8063dc39d06d146105b9578063dd62ed3e146105cc578063e7a324dc146105df576102ff565b8063d505accf116100c8578063d505accf14610571578063d84a139d14610584578063dc25ca51146105a6576102ff565b8063c3cda52014610543578063c3ef298714610556578063d4ee1d9014610569576102ff565b8063a9059cbb11610150578063b24d53101161012a578063b24d53101461050a578063b4b5ea571461051d578063bdfb5b9014610530576102ff565b8063a9059cbb146104dc578063aad41a41146104ef578063aff00e7514610502576102ff565b806395d89b411161018157806395d89b41146104b9578063985d5449146104c1578063a6237aa2146104c9576102ff565b80638456cb59146104a95780638da5cb5b146104b1576102ff565b80633f4ba83a116102555780636fcfff4511610209578063782d6fe1116101e3578063782d6fe11461047b57806379ba50971461048e5780637ecebe0014610496576102ff565b80636fcfff451461043557806370a082311461045557806371ad963414610468576102ff565b80635c19a95c1161023a5780635c19a95c146104075780635c975abb1461041a5780636d1b229d14610422576102ff565b80633f4ba83a146103df578063587cde1e146103e7576102ff565b806320606b70116102b75780632797c6c8116102915780632797c6c8146103ad57806330adf81f146103c2578063313ce567146103ca576102ff565b806320606b701461037f57806323b872dd1461038757806324d6239e1461039a576102ff565b80631501ea1c116102e85780631501ea1c1461034257806318160ddd146103555780631dcd5c5d1461036a576102ff565b806306fdde0314610304578063095ea7b314610322575b600080fd5b61030c61062e565b60405161031991906147c9565b60405180910390f35b61033561033036600461449e565b610667565b60405161031991906146f4565b610335610350366004614378565b6107a2565b61035d6107b7565b6040516103199190614cc3565b6103726107cb565b60405161031991906146ff565b6103726107d1565b6103356103953660046143c4565b6107f5565b6103726103a8366004614378565b6109c0565b6103c06103bb36600461449e565b6109fa565b005b610372610a81565b6103d2610aa5565b6040516103199190614cb5565b6103c0610aaa565b6103fa6103f5366004614378565b610b75565b6040516103199190614679565b6103c0610415366004614378565b610b9d565b610335610bd2565b61033561043036600461462b565b610bf3565b610448610443366004614378565b610e33565b6040516103199190614c80565b610372610463366004614378565b610e4b565b610372610476366004614378565b610fd5565b61035d61048936600461449e565b611003565b6103c06112c4565b6103726104a4366004614378565b6113ca565b6103c06113dc565b6103fa6114bf565b61030c6114db565b61035d611514565b6103c06104d7366004614468565b611921565b6103356104ea36600461449e565b6119c8565b6103726104fd366004614551565b611a2e565b610372611ec3565b6103c061051836600461462b565b612003565b61035d61052b366004614378565b6121ec565b6103fa61053e36600461462b565b61228a565b6103c06105513660046144c7565b6122c1565b610372610564366004614551565b612591565b6103fa612ad7565b6103c061057f3660046143ff565b612af3565b61059761059236600461451e565b612f7e565b60405161031993929190614c6a565b6103c06105b4366004614378565b612ff9565b6103356105c736600461449e565b613192565b6103726105da366004614392565b613290565b6103726132d6565b6105fa6105f536600461451e565b6132fa565b604051610319929190614c91565b610372610616366004614378565b613335565b6103c0610629366004614378565b61361e565b6040518060400160405280601781526020017f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561069257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156106cf57506bffffffffffffffffffffffff6106f4565b6106f1836040518060600160405280602581526020016151ce602591396136de565b90505b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061078e908590614cc3565b60405180910390a360019150505b92915050565b60096020526000908152604090205460ff1681565b6002546bffffffffffffffffffffffff1681565b600c5481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60015460009074010000000000000000000000000000000000000000900460ff161561082057600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203380855290835281842054825160608101909352602580845291946bffffffffffffffffffffffff9091169390926108889288926151ce908301396136de565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108d457506bffffffffffffffffffffffff82811614155b156109a85760006108fe83836040518060600160405280603d8152602001614feb603d9139613730565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600360209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099e908590614cc3565b60405180910390a3505b6109b387878361379e565b5060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020546bffffffffffffffffffffffff165b919050565b3360009081526009602052604090205460ff16610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614903565b60405180910390fd5b6000610a708260405180606001604052806022815260200161532d602291396136de565b9050610a7c8382613a05565b505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60005473ffffffffffffffffffffffffffffffffffffffff163314610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff16610b2257600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600d6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615610bc557600080fd5b610bcf3382613bff565b50565b60015474010000000000000000000000000000000000000000900460ff1681565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000610c69836040518060600160405280602881526020016150f9602891396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260409020549091506bffffffffffffffffffffffff9081169082161115610cb057600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526031808452610d0d936bffffffffffffffffffffffff909216928592919061519d90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9485161790556002548251606081019093526036808452610d98949190911692859290919061527990830139613730565b600280547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790556000805460405173ffffffffffffffffffffffffffffffffffffffff909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e22908590614cc3565b60405180910390a350600192915050565b600f6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602090815260408083205460059092528220546bffffffffffffffffffffffff9091169063ffffffff16610eac576bffffffffffffffffffffffff1690506109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602052604090205463ffffffff90811690821611610fc05773ffffffffffffffffffffffffffffffffffffffff8416600081815260066020908152604080832063ffffffff86168085529083528184205494845260078352818420908452825280832054815160608101909252602e8083529394610f68946bffffffffffffffffffffffff918216949290911692916150cb90830139613730565b9050610faa83826040518060400160405280601981526020017f474e42553a3a62616c616e63654f663a206f766572666c6f7700000000000000815250613cb3565b9250508080610fb890614ef5565b915050610eaf565b506bffffffffffffffffffffffff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205463ffffffff1690565b600043821061103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061483a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205463ffffffff168061107957600091505061079c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812084916110ab600185614e3d565b63ffffffff908116825260208201929092526040016000205416116111315773ffffffffffffffffffffffffffffffffffffffff84166000908152600e60205260408120906110fb600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff16915061079c9050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020908152604080832083805290915290205463ffffffff1683101561117957600091505061079c565b600080611187600184614e3d565b90505b8163ffffffff168163ffffffff16111561126c57600060026111ac8484614e3d565b6111b69190614db0565b6111c09083614e3d565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600e6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff16918101919091529192508714156112405760200151945061079c9350505050565b805163ffffffff1687111561125757819350611265565b611262600183614e3d565b92505b505061118a565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112e857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff90811680835260046020526040909220546001546bffffffffffffffffffffffff90911692611333929091168361379e565b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35060018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60106020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff161561145557600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f474e42550000000000000000000000000000000000000000000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561153f57600080fd5b3360009081526005602052604090205463ffffffff1661158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614ae5565b60015b3360009081526005602052604090205463ffffffff908116908216116118355733600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561160157611823565b33600090815260086020908152604080832063ffffffff8516845290915290205442101561162e57611835565b600a5433600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff16906116b5906116819042614e26565b33600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b6116bf9190614dd3565b33600090815260066020908152604080832063ffffffff871684529091529020549091506bffffffffffffffffffffffff908116908216111561172d575033600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b33600090815260076020908152604080832063ffffffff8616845282529182902054825160608101909352603680845284936117819385936bffffffffffffffffffffffff169290614fb590830139613730565b91506117c384836040518060400160405280601d81526020017f474e42553a3a756e766573743a20616464696e67206f766572666c6f77000000815250613cb3565b33600090815260076020908152604080832063ffffffff88168452909152902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091559250505b8061182d81614ef5565b91505061158e565b5033600090815260046020908152604091829020548251808401909352601d83527f474e42553a3a756e766573743a20616464696e67206f766572666c6f770000009183019190915261189a916bffffffffffffffffffffffff909116908390613cb3565b336000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff949094169390931790925590517ffa5db7be915522c6b65b302ca1c4bfbfd4f0d898d50af75e513796dc44aee52b916119169184906146c0565b60405180910390a190565b60005473ffffffffffffffffffffffffffffffffffffffff163314611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015460009074010000000000000000000000000000000000000000900460ff16156119f357600080fd5b6000611a1783604051806060016040528060268152602001615121602691396136de565b9050611a2433858361379e565b5060019392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b8151835114611a8e57600080fd5b6064835110611a9c57600080fd5b6000805b8351811015611b0957838181518110611ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182611af59190614d49565b915080611b0181614ebc565b915050611aa0565b506000611b2e82604051806060016040528060268152602001615121602691396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526036808452939450611b8f936bffffffffffffffffffffffff9091169285929091906152af90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb857611cf460046000888481518110611c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16868381518110611cce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518060600160405280603681526020016152af60369139613cb3565b60046000888481518110611d31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550858181518110611dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110611e89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611e9e91906146ff565b60405180910390a380611eb081614ebc565b915050611bf1565b505092519392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260408120546bffffffffffffffffffffffff16815b600b54811015611fb957611fa58260046000600b8581548110611f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282810193909352604091820190205481516060810190925260268083526bffffffffffffffffffffffff909116926151f390830139613cb3565b915080611fb181614ebc565b915050611ef9565b5060025460408051606081019091526030808252611fef926bffffffffffffffffffffffff169184916150286020830139613730565b6bffffffffffffffffffffffff1691505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314612054576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b600b805461206490600190614e26565b8154811061209b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106120fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b80548061217b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155600c8054916121e483614e87565b919050555050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f602052604081205463ffffffff1680612224576000612283565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e6020526040812090612255600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b600b818154811061229a57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60015474010000000000000000000000000000000000000000900460ff16156122e957600080fd5b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c61236a613dd4565b3060405160200161237e949392919061477a565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016123cf9493929190614749565b604051602081830303815290604052805190602001209050600082826040516020016123fc929190614643565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161243994939291906147ab565b6020604051602081039080840390855afa15801561245b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166124d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614bd6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260106020526040812080549161250483614ebc565b919050558914612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b79565b8742111561257a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614a51565b612584818b613bff565b505050505b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146125e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b81518351146125f157600080fd5b60648351106125ff57600080fd5b6000805b835181101561266c57838181518110612645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826126589190614d49565b91508061266481614ebc565b915050612603565b50600061269182604051806060016040528060278152602001615058602791396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460209081526040918290205482516060810190935260308084529394506126f2936bffffffffffffffffffffffff90911692859290919061521990830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb85760006005600088848151811061279c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900463ffffffff166127fa90614ef5565b91906101000a81548163ffffffff021916908363ffffffff16021790559050858281518110612852577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000898581518110612897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040908101600090812063ffffffff86168252909252902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff928316179055600a5461291f911642614d49565b6008600089858151811061295c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff168152602001908152602001600020819055508682815181106129f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef888581518110612aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051612abc91906146ff565b60405180910390a35080612acf81614ebc565b915050612754565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615612b1b57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415612b5857506bffffffffffffffffffffffff612b7d565b612b7a866040518060600160405280602481526020016150a7602491396136de565b90505b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c612bfe613dd4565b30604051602001612c12949392919061477a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8c166000908152601090935290822080549193507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c9186612ca383614ebc565b919050558b604051602001612cbd96959493929190614708565b60405160208183030381529060405280519060200120905060008282604051602001612cea929190614643565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051612d2794939291906147ab565b6020604051602081039080840390855afa158015612d49573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614aae565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906148cc565b88421115612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614c33565b84600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051612f689190614cc3565b60405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff909116600081815260066020908152604080832063ffffffff909516808452948252808320548484526007835281842086855283528184205494845260088352818420958452949091529020546bffffffffffffffffffffffff92831693919092169190565b60005473ffffffffffffffffffffffffffffffffffffffff16331461304a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60005b600b54811015613114578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106130a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415613102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061493a565b8061310c81614ebc565b91505061304d565b50600b805460018101825560009182527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c8054916121e483614ebc565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146131e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581169263a9059cbb9261323e9290911690869060040161469a565b602060405180830381600087803b15801561325857600080fd5b505af115801561326c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612283919061460f565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526003602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600e60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205463ffffffff1661336d575060006109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205463ffffffff908116908216116136185773ffffffffffffffffffffffffffffffffffffffff8316600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561340f57613606565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832063ffffffff8516845290915290205442101561345257613618565b600a5473ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff1690613505906134bb9042614e26565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b61350f9190614dd3565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260066020908152604080832063ffffffff871684529091529020546bffffffffffffffffffffffff9182169250168111156135a7575073ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832063ffffffff861684529091529020546135f6906bffffffffffffffffffffffff1682614e26565b90506136028184614d49565b9250505b8061361081614ef5565b915050613370565b50919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461366f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015473ffffffffffffffffffffffffffffffffffffffff8281169116141561369757600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000816c010000000000000000000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff161115829061378b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b506137968385614e62565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166137eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906149f4565b73ffffffffffffffffffffffffffffffffffffffff8216613838576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614997565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020908152604091829020548251606081019093526036808452613895936bffffffffffffffffffffffff90921692859291906152af90830139613730565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452613927949190911692859290919061524990830139613cb3565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906139be908590614cc3565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff8084166000908152600d6020526040808220548584168352912054610a7c92918216911683613dd8565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548290613a3d9063ffffffff16614ef5565b825463ffffffff8083166101009490940a8481029102199091161790925573ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083209383529290522080546bffffffffffffffffffffffff8086167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921691909117909155600a54919250613ad8911642614d49565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260086020908152604080832063ffffffff871684528252808320949094558154909216815260048252829020548251606081019093526022808452613b55936bffffffffffffffffffffffff909216928692919061514790830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff90811682526004602052604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559054915185821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613bf2908690614cc3565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600d6020818152604080842080546004845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4613cad828483613dd8565b50505050565b600080613cc08486614d89565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390613d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b50949350505050565b600080613d49846040518060600160405280602181526020016152e5602191396136de565b90506bffffffffffffffffffffffff8116613d6857600091505061079c565b6000613d748483614df2565b90506bffffffffffffffffffffffff8416613d8f8383614dd3565b6bffffffffffffffffffffffff1614613796576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b1c565b4690565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613e2257506000816bffffffffffffffffffffffff16115b15610a7c5773ffffffffffffffffffffffffffffffffffffffff831615613f145773ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205463ffffffff169081613e7c576000613edb565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812090613ead600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613f02828560405180606001604052806028815260200161507f60289139613730565b9050613f1086848484613ff9565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610a7c5773ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604081205463ffffffff169081613f69576000613fc8565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812090613f9a600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613fef828560405180606001604052806027815260200161530660279139613cb3565b9050612589858484845b600061401d4360405180606001604052806034815260200161516960349139614295565b905060008463ffffffff16118015614084575073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812063ffffffff831691614068600188614e3d565b63ffffffff908116825260208201929092526040016000205416145b1561411a5773ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812083916140bb600188614e3d565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff90921691909117905561423e565b60408051808201825263ffffffff83811682526bffffffffffffffffffffffff858116602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600e82528681208b86168252909152949094209251835494517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009095169216919091177fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff1664010000000093909116929092029190911790556141e5846001614d61565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051614286929190614cdc565b60405180910390a25050505050565b6000816401000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b803573ffffffffffffffffffffffffffffffffffffffff811681146109f557600080fd5b600082601f83011261430b578081fd5b8135602061432061431b83614d25565b614cfb565b828152818101908583018385028701840188101561433c578586fd5b855b8581101561435a5781358452928401929084019060010161433e565b5090979650505050505050565b803560ff811681146109f557600080fd5b600060208284031215614389578081fd5b612283826142d7565b600080604083850312156143a4578081fd5b6143ad836142d7565b91506143bb602084016142d7565b90509250929050565b6000806000606084860312156143d8578081fd5b6143e1846142d7565b92506143ef602085016142d7565b9150604084013590509250925092565b600080600080600080600060e0888a031215614419578283fd5b614422886142d7565b9650614430602089016142d7565b9550604088013594506060880135935061444c60808901614367565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561447a578182fd5b614483836142d7565b9150602083013561449381614fa6565b809150509250929050565b600080604083850312156144b0578182fd5b6144b9836142d7565b946020939093013593505050565b60008060008060008060c087890312156144df578182fd5b6144e8876142d7565b9550602087013594506040870135935061450460608801614367565b92506080870135915060a087013590509295509295509295565b60008060408385031215614530578182fd5b614539836142d7565b9150602083013563ffffffff81168114614493578182fd5b60008060408385031215614563578182fd5b823567ffffffffffffffff8082111561457a578384fd5b818501915085601f83011261458d578384fd5b8135602061459d61431b83614d25565b82815281810190858301838502870184018b10156145b9578889fd5b8896505b848710156145e2576145ce816142d7565b8352600196909601959183019183016145bd565b50965050860135925050808211156145f8578283fd5b50614605858286016142fb565b9150509250929050565b600060208284031215614620578081fd5b815161228381614fa6565b60006020828403121561463c578081fd5b5035919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845273ffffffffffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156147f5578581018301518582016040015282016147d9565b818111156148065783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526027908201527f474e42553a3a6765745072696f72566f7465733a206e6f74207965742064657460408201527f65726d696e656400000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f474e42553a3a7065726d69743a20756e617574686f72697a6564000000000000604082015260600190565b60208082526016908201527f474e42553a3a766573743a206e6f742076657374657200000000000000000000604082015260600190565b6020808252602f908201527f474e42553a3a757064617465537570706f7274556e69744164643a207375707060408201527f6f727420756e6974206578697374730000000000000000000000000000000000606082015260800190565b6020808252603a908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606082015260800190565b6020808252603c908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a207369676e6174757265206560408201527f7870697265640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a20696e76616c6964207369676e617475726500604082015260600190565b6020808252601d908201527f474e42553a3a756e766573743a4e6f2076657374656420616d6f756e74000000604082015260600190565b60208082526023908201527f474e42553a6d756c39363a206d756c7469706c69636174696f6e206f7665726660408201527f6c6f770000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f474e42553a3a64656c656761746542795369673a20696e76616c6964206e6f6e60408201527f6365000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a20696e76616c69642073696760408201527f6e61747572650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a207369676e6174757265206578706972656400604082015260600190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b6bffffffffffffffffffffffff91909116815260200190565b6bffffffffffffffffffffffff92831681529116602082015260400190565b60405181810167ffffffffffffffff81118282101715614d1d57614d1d614f77565b604052919050565b600067ffffffffffffffff821115614d3f57614d3f614f77565b5060209081020190565b60008219821115614d5c57614d5c614f19565b500190565b600063ffffffff808316818516808303821115614d8057614d80614f19565b01949350505050565b60006bffffffffffffffffffffffff808316818516808303821115614d8057614d80614f19565b600063ffffffff80841680614dc757614dc7614f48565b92169190910492915050565b60006bffffffffffffffffffffffff80841680614dc757614dc7614f48565b60006bffffffffffffffffffffffff80831681851681830481118215151615614e1d57614e1d614f19565b02949350505050565b600082821015614e3857614e38614f19565b500390565b600063ffffffff83811690831681811015614e5a57614e5a614f19565b039392505050565b60006bffffffffffffffffffffffff83811690831681811015614e5a57614e5a614f19565b600081614e9657614e96614f19565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eee57614eee614f19565b5060010190565b600063ffffffff80831681811415614f0f57614f0f614f19565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114610bcf57600080fdfe474e42553a3a756e766573743a20616c726561647920756e76657374656420616d6f756e74206578636565647320746f556e76657374474e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365474e42553a3a6672656543697263756c6174696f6e3a20616d6f756e742065786365656420746f74616c537570706c79474e42553a3a6d756c7469766573743a20616d6f756e7420657863656564732039362062697473474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773474e42553a3a7065726d69743a20616d6f756e7420657863656564732039362062697473474e42553a3a62616c616e63654f663a20756e766573746564206578636565642076657374656420616d6f756e74474e42553a3a6275726e546f6b656e733a20616d6f756e7420657863656564732039362062697473474e42553a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473474e42553a3a5f766573743a2065786365656473206f776e65722062616c616e6365474e42553a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a617070726f76653a20616d6f756e7420657863656564732039362062697473474e42553a3a6672656543697263756c6174696f6e3a20616464696e67206f766572666c6f77474e42553a3a6d756c7469766573743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e74206578636565647320746f74616c20737570706c79474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a6d756c39363a20616d6f756e7420657863656564732075696e743936474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773474e42553a3a766573743a20616d6f756e7420657863656564732039362062697473a26469706673582212200411e264d09cf94b2e62a762b827fd9c08eb09587de5a825361b0709c19f376664736f6c63430008000033
0x60806040526001805460ff60a01b19169055600280546a52b7d2dcc80cd2e40000006001600160601b031991821617909155600a8054624f1a00921691909117600160601b600160c01b0319166ec864000000000000000000000000001790553480156200006c57600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360028054600080546001600160a01b0390811682526004602052604080832080546001600160601b0319166001600160601b03958616179055825494549051949091169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926200012d92909116906200013b565b60405180910390a36200014f565b6001600160601b0391909116815260200190565b615384806200015f6000396000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c80638456cb591161019c578063c3cda520116100ee578063dc39d06d11610097578063f1127ed811610071578063f1127ed8146105e7578063f1b5c88e14610608578063f2fde38b1461061b576102ff565b8063dc39d06d146105b9578063dd62ed3e146105cc578063e7a324dc146105df576102ff565b8063d505accf116100c8578063d505accf14610571578063d84a139d14610584578063dc25ca51146105a6576102ff565b8063c3cda52014610543578063c3ef298714610556578063d4ee1d9014610569576102ff565b8063a9059cbb11610150578063b24d53101161012a578063b24d53101461050a578063b4b5ea571461051d578063bdfb5b9014610530576102ff565b8063a9059cbb146104dc578063aad41a41146104ef578063aff00e7514610502576102ff565b806395d89b411161018157806395d89b41146104b9578063985d5449146104c1578063a6237aa2146104c9576102ff565b80638456cb59146104a95780638da5cb5b146104b1576102ff565b80633f4ba83a116102555780636fcfff4511610209578063782d6fe1116101e3578063782d6fe11461047b57806379ba50971461048e5780637ecebe0014610496576102ff565b80636fcfff451461043557806370a082311461045557806371ad963414610468576102ff565b80635c19a95c1161023a5780635c19a95c146104075780635c975abb1461041a5780636d1b229d14610422576102ff565b80633f4ba83a146103df578063587cde1e146103e7576102ff565b806320606b70116102b75780632797c6c8116102915780632797c6c8146103ad57806330adf81f146103c2578063313ce567146103ca576102ff565b806320606b701461037f57806323b872dd1461038757806324d6239e1461039a576102ff565b80631501ea1c116102e85780631501ea1c1461034257806318160ddd146103555780631dcd5c5d1461036a576102ff565b806306fdde0314610304578063095ea7b314610322575b600080fd5b61030c61062e565b60405161031991906147c9565b60405180910390f35b61033561033036600461449e565b610667565b60405161031991906146f4565b610335610350366004614378565b6107a2565b61035d6107b7565b6040516103199190614cc3565b6103726107cb565b60405161031991906146ff565b6103726107d1565b6103356103953660046143c4565b6107f5565b6103726103a8366004614378565b6109c0565b6103c06103bb36600461449e565b6109fa565b005b610372610a81565b6103d2610aa5565b6040516103199190614cb5565b6103c0610aaa565b6103fa6103f5366004614378565b610b75565b6040516103199190614679565b6103c0610415366004614378565b610b9d565b610335610bd2565b61033561043036600461462b565b610bf3565b610448610443366004614378565b610e33565b6040516103199190614c80565b610372610463366004614378565b610e4b565b610372610476366004614378565b610fd5565b61035d61048936600461449e565b611003565b6103c06112c4565b6103726104a4366004614378565b6113ca565b6103c06113dc565b6103fa6114bf565b61030c6114db565b61035d611514565b6103c06104d7366004614468565b611921565b6103356104ea36600461449e565b6119c8565b6103726104fd366004614551565b611a2e565b610372611ec3565b6103c061051836600461462b565b612003565b61035d61052b366004614378565b6121ec565b6103fa61053e36600461462b565b61228a565b6103c06105513660046144c7565b6122c1565b610372610564366004614551565b612591565b6103fa612ad7565b6103c061057f3660046143ff565b612af3565b61059761059236600461451e565b612f7e565b60405161031993929190614c6a565b6103c06105b4366004614378565b612ff9565b6103356105c736600461449e565b613192565b6103726105da366004614392565b613290565b6103726132d6565b6105fa6105f536600461451e565b6132fa565b604051610319929190614c91565b610372610616366004614378565b613335565b6103c0610629366004614378565b61361e565b6040518060400160405280601781526020017f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561069257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156106cf57506bffffffffffffffffffffffff6106f4565b6106f1836040518060600160405280602581526020016151ce602591396136de565b90505b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061078e908590614cc3565b60405180910390a360019150505b92915050565b60096020526000908152604090205460ff1681565b6002546bffffffffffffffffffffffff1681565b600c5481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60015460009074010000000000000000000000000000000000000000900460ff161561082057600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602090815260408083203380855290835281842054825160608101909352602580845291946bffffffffffffffffffffffff9091169390926108889288926151ce908301396136de565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108d457506bffffffffffffffffffffffff82811614155b156109a85760006108fe83836040518060600160405280603d8152602001614feb603d9139613730565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600360209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099e908590614cc3565b60405180910390a3505b6109b387878361379e565b5060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020546bffffffffffffffffffffffff165b919050565b3360009081526009602052604090205460ff16610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614903565b60405180910390fd5b6000610a708260405180606001604052806022815260200161532d602291396136de565b9050610a7c8382613a05565b505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60005473ffffffffffffffffffffffffffffffffffffffff163314610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff16610b2257600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600d6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615610bc557600080fd5b610bcf3382613bff565b50565b60015474010000000000000000000000000000000000000000900460ff1681565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000610c69836040518060600160405280602881526020016150f9602891396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260409020549091506bffffffffffffffffffffffff9081169082161115610cb057600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526031808452610d0d936bffffffffffffffffffffffff909216928592919061519d90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9485161790556002548251606081019093526036808452610d98949190911692859290919061527990830139613730565b600280547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790556000805460405173ffffffffffffffffffffffffffffffffffffffff909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e22908590614cc3565b60405180910390a350600192915050565b600f6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602090815260408083205460059092528220546bffffffffffffffffffffffff9091169063ffffffff16610eac576bffffffffffffffffffffffff1690506109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602052604090205463ffffffff90811690821611610fc05773ffffffffffffffffffffffffffffffffffffffff8416600081815260066020908152604080832063ffffffff86168085529083528184205494845260078352818420908452825280832054815160608101909252602e8083529394610f68946bffffffffffffffffffffffff918216949290911692916150cb90830139613730565b9050610faa83826040518060400160405280601981526020017f474e42553a3a62616c616e63654f663a206f766572666c6f7700000000000000815250613cb3565b9250508080610fb890614ef5565b915050610eaf565b506bffffffffffffffffffffffff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205463ffffffff1690565b600043821061103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061483a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205463ffffffff168061107957600091505061079c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812084916110ab600185614e3d565b63ffffffff908116825260208201929092526040016000205416116111315773ffffffffffffffffffffffffffffffffffffffff84166000908152600e60205260408120906110fb600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff16915061079c9050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020908152604080832083805290915290205463ffffffff1683101561117957600091505061079c565b600080611187600184614e3d565b90505b8163ffffffff168163ffffffff16111561126c57600060026111ac8484614e3d565b6111b69190614db0565b6111c09083614e3d565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600e6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff16918101919091529192508714156112405760200151945061079c9350505050565b805163ffffffff1687111561125757819350611265565b611262600183614e3d565b92505b505061118a565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112e857600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff90811680835260046020526040909220546001546bffffffffffffffffffffffff90911692611333929091168361379e565b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35060018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60106020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015474010000000000000000000000000000000000000000900460ff161561145557600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f474e42550000000000000000000000000000000000000000000000000000000081525081565b60015460009074010000000000000000000000000000000000000000900460ff161561153f57600080fd5b3360009081526005602052604090205463ffffffff1661158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614ae5565b60015b3360009081526005602052604090205463ffffffff908116908216116118355733600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561160157611823565b33600090815260086020908152604080832063ffffffff8516845290915290205442101561162e57611835565b600a5433600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff16906116b5906116819042614e26565b33600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b6116bf9190614dd3565b33600090815260066020908152604080832063ffffffff871684529091529020549091506bffffffffffffffffffffffff908116908216111561172d575033600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b33600090815260076020908152604080832063ffffffff8616845282529182902054825160608101909352603680845284936117819385936bffffffffffffffffffffffff169290614fb590830139613730565b91506117c384836040518060400160405280601d81526020017f474e42553a3a756e766573743a20616464696e67206f766572666c6f77000000815250613cb3565b33600090815260076020908152604080832063ffffffff88168452909152902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091559250505b8061182d81614ef5565b91505061158e565b5033600090815260046020908152604091829020548251808401909352601d83527f474e42553a3a756e766573743a20616464696e67206f766572666c6f770000009183019190915261189a916bffffffffffffffffffffffff909116908390613cb3565b336000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff949094169390931790925590517ffa5db7be915522c6b65b302ca1c4bfbfd4f0d898d50af75e513796dc44aee52b916119169184906146c0565b60405180910390a190565b60005473ffffffffffffffffffffffffffffffffffffffff163314611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015460009074010000000000000000000000000000000000000000900460ff16156119f357600080fd5b6000611a1783604051806060016040528060268152602001615121602691396136de565b9050611a2433858361379e565b5060019392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b8151835114611a8e57600080fd5b6064835110611a9c57600080fd5b6000805b8351811015611b0957838181518110611ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182611af59190614d49565b915080611b0181614ebc565b915050611aa0565b506000611b2e82604051806060016040528060268152602001615121602691396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020908152604091829020548251606081019093526036808452939450611b8f936bffffffffffffffffffffffff9091169285929091906152af90830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb857611cf460046000888481518110611c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16868381518110611cce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518060600160405280603681526020016152af60369139613cb3565b60046000888481518110611d31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550858181518110611dda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110611e89577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611e9e91906146ff565b60405180910390a380611eb081614ebc565b915050611bf1565b505092519392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460205260408120546bffffffffffffffffffffffff16815b600b54811015611fb957611fa58260046000600b8581548110611f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16835282810193909352604091820190205481516060810190925260268083526bffffffffffffffffffffffff909116926151f390830139613cb3565b915080611fb181614ebc565b915050611ef9565b5060025460408051606081019091526030808252611fef926bffffffffffffffffffffffff169184916150286020830139613730565b6bffffffffffffffffffffffff1691505090565b60005473ffffffffffffffffffffffffffffffffffffffff163314612054576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b600b805461206490600190614e26565b8154811061209b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106120fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b80548061217b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155600c8054916121e483614e87565b919050555050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f602052604081205463ffffffff1680612224576000612283565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600e6020526040812090612255600184614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b600b818154811061229a57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60015474010000000000000000000000000000000000000000900460ff16156122e957600080fd5b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c61236a613dd4565b3060405160200161237e949392919061477a565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016123cf9493929190614749565b604051602081830303815290604052805190602001209050600082826040516020016123fc929190614643565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161243994939291906147ab565b6020604051602081039080840390855afa15801561245b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166124d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614bd6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260106020526040812080549161250483614ebc565b919050558914612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b79565b8742111561257a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614a51565b612584818b613bff565b505050505b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146125e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b81518351146125f157600080fd5b60648351106125ff57600080fd5b6000805b835181101561266c57838181518110612645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826126589190614d49565b91508061266481614ebc565b915050612603565b50600061269182604051806060016040528060278152602001615058602791396136de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600460209081526040918290205482516060810190935260308084529394506126f2936bffffffffffffffffffffffff90911692859290919061521990830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260046020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611eb85760006005600088848151811061279c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900463ffffffff166127fa90614ef5565b91906101000a81548163ffffffff021916908363ffffffff16021790559050858281518110612852577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000898581518110612897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040908101600090812063ffffffff86168252909252902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff928316179055600a5461291f911642614d49565b6008600089858151811061295c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff168152602001908152602001600020819055508682815181106129f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef888581518110612aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051612abc91906146ff565b60405180910390a35080612acf81614ebc565b915050612754565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615612b1b57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415612b5857506bffffffffffffffffffffffff612b7d565b612b7a866040518060600160405280602481526020016150a7602491396136de565b90505b60408051808201909152601781527f4e696d62757320476f7665726e616e636520546f6b656e00000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fdedc3a41841d54a0c22d8c6d98aba038f54aa37f881e54f102160c5b828fed1c612bfe613dd4565b30604051602001612c12949392919061477a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8c166000908152601090935290822080549193507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c9186612ca383614ebc565b919050558b604051602001612cbd96959493929190614708565b60405160208183030381529060405280519060200120905060008282604051602001612cea929190614643565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051612d2794939291906147ab565b6020604051602081039080840390855afa158015612d49573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614aae565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906148cc565b88421115612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614c33565b84600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051612f689190614cc3565b60405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff909116600081815260066020908152604080832063ffffffff909516808452948252808320548484526007835281842086855283528184205494845260088352818420958452949091529020546bffffffffffffffffffffffff92831693919092169190565b60005473ffffffffffffffffffffffffffffffffffffffff16331461304a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60005b600b54811015613114578173ffffffffffffffffffffffffffffffffffffffff16600b82815481106130a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415613102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a439061493a565b8061310c81614ebc565b91505061304d565b50600b805460018101825560009182527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c8054916121e483614ebc565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146131e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581169263a9059cbb9261323e9290911690869060040161469a565b602060405180830381600087803b15801561325857600080fd5b505af115801561326c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612283919061460f565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526003602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600e60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205463ffffffff1661336d575060006109f5565b60015b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205463ffffffff908116908216116136185773ffffffffffffffffffffffffffffffffffffffff8316600081815260076020908152604080832063ffffffff861680855290835281842054948452600683528184209084529091529020546bffffffffffffffffffffffff9081169116141561340f57613606565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832063ffffffff8516845290915290205442101561345257613618565b600a5473ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff8616845290915281205490916c0100000000000000000000000090046bffffffffffffffffffffffff1690613505906134bb9042614e26565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260066020908152604080832063ffffffff891684529091529020546bffffffffffffffffffffffff16613d24565b61350f9190614dd3565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260066020908152604080832063ffffffff871684529091529020546bffffffffffffffffffffffff9182169250168111156135a7575073ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832063ffffffff851684529091529020546bffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832063ffffffff861684529091529020546135f6906bffffffffffffffffffffffff1682614e26565b90506136028184614d49565b9250505b8061361081614ef5565b915050613370565b50919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461366f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614897565b60015473ffffffffffffffffffffffffffffffffffffffff8281169116141561369757600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000816c010000000000000000000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff161115829061378b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b506137968385614e62565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166137eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906149f4565b73ffffffffffffffffffffffffffffffffffffffff8216613838576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614997565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020908152604091829020548251606081019093526036808452613895936bffffffffffffffffffffffff90921692859291906152af90830139613730565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452613927949190911692859290919061524990830139613cb3565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600460205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906139be908590614cc3565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff8084166000908152600d6020526040808220548584168352912054610a7c92918216911683613dd8565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548290613a3d9063ffffffff16614ef5565b825463ffffffff8083166101009490940a8481029102199091161790925573ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083209383529290522080546bffffffffffffffffffffffff8086167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921691909117909155600a54919250613ad8911642614d49565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260086020908152604080832063ffffffff871684528252808320949094558154909216815260048252829020548251606081019093526022808452613b55936bffffffffffffffffffffffff909216928692919061514790830139613730565b6000805473ffffffffffffffffffffffffffffffffffffffff90811682526004602052604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559054915185821692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613bf2908690614cc3565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600d6020818152604080842080546004845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4613cad828483613dd8565b50505050565b600080613cc08486614d89565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390613d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b50949350505050565b600080613d49846040518060600160405280602181526020016152e5602191396136de565b90506bffffffffffffffffffffffff8116613d6857600091505061079c565b6000613d748483614df2565b90506bffffffffffffffffffffffff8416613d8f8383614dd3565b6bffffffffffffffffffffffff1614613796576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390614b1c565b4690565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613e2257506000816bffffffffffffffffffffffff16115b15610a7c5773ffffffffffffffffffffffffffffffffffffffff831615613f145773ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205463ffffffff169081613e7c576000613edb565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812090613ead600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613f02828560405180606001604052806028815260200161507f60289139613730565b9050613f1086848484613ff9565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610a7c5773ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604081205463ffffffff169081613f69576000613fc8565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600e6020526040812090613f9a600185614e3d565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b90506000613fef828560405180606001604052806027815260200161530660279139613cb3565b9050612589858484845b600061401d4360405180606001604052806034815260200161516960349139614295565b905060008463ffffffff16118015614084575073ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812063ffffffff831691614068600188614e3d565b63ffffffff908116825260208201929092526040016000205416145b1561411a5773ffffffffffffffffffffffffffffffffffffffff85166000908152600e6020526040812083916140bb600188614e3d565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff90921691909117905561423e565b60408051808201825263ffffffff83811682526bffffffffffffffffffffffff858116602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600e82528681208b86168252909152949094209251835494517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009095169216919091177fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff1664010000000093909116929092029190911790556141e5846001614d61565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051614286929190614cdc565b60405180910390a25050505050565b6000816401000000008410613728576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4391906147c9565b803573ffffffffffffffffffffffffffffffffffffffff811681146109f557600080fd5b600082601f83011261430b578081fd5b8135602061432061431b83614d25565b614cfb565b828152818101908583018385028701840188101561433c578586fd5b855b8581101561435a5781358452928401929084019060010161433e565b5090979650505050505050565b803560ff811681146109f557600080fd5b600060208284031215614389578081fd5b612283826142d7565b600080604083850312156143a4578081fd5b6143ad836142d7565b91506143bb602084016142d7565b90509250929050565b6000806000606084860312156143d8578081fd5b6143e1846142d7565b92506143ef602085016142d7565b9150604084013590509250925092565b600080600080600080600060e0888a031215614419578283fd5b614422886142d7565b9650614430602089016142d7565b9550604088013594506060880135935061444c60808901614367565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561447a578182fd5b614483836142d7565b9150602083013561449381614fa6565b809150509250929050565b600080604083850312156144b0578182fd5b6144b9836142d7565b946020939093013593505050565b60008060008060008060c087890312156144df578182fd5b6144e8876142d7565b9550602087013594506040870135935061450460608801614367565b92506080870135915060a087013590509295509295509295565b60008060408385031215614530578182fd5b614539836142d7565b9150602083013563ffffffff81168114614493578182fd5b60008060408385031215614563578182fd5b823567ffffffffffffffff8082111561457a578384fd5b818501915085601f83011261458d578384fd5b8135602061459d61431b83614d25565b82815281810190858301838502870184018b10156145b9578889fd5b8896505b848710156145e2576145ce816142d7565b8352600196909601959183019183016145bd565b50965050860135925050808211156145f8578283fd5b50614605858286016142fb565b9150509250929050565b600060208284031215614620578081fd5b815161228381614fa6565b60006020828403121561463c578081fd5b5035919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845273ffffffffffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156147f5578581018301518582016040015282016147d9565b818111156148065783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526027908201527f474e42553a3a6765745072696f72566f7465733a206e6f74207965742064657460408201527f65726d696e656400000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f474e42553a3a7065726d69743a20756e617574686f72697a6564000000000000604082015260600190565b60208082526016908201527f474e42553a3a766573743a206e6f742076657374657200000000000000000000604082015260600190565b6020808252602f908201527f474e42553a3a757064617465537570706f7274556e69744164643a207375707060408201527f6f727420756e6974206578697374730000000000000000000000000000000000606082015260800190565b6020808252603a908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606082015260800190565b6020808252603c908201527f474e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a207369676e6174757265206560408201527f7870697265640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a20696e76616c6964207369676e617475726500604082015260600190565b6020808252601d908201527f474e42553a3a756e766573743a4e6f2076657374656420616d6f756e74000000604082015260600190565b60208082526023908201527f474e42553a6d756c39363a206d756c7469706c69636174696f6e206f7665726660408201527f6c6f770000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f474e42553a3a64656c656761746542795369673a20696e76616c6964206e6f6e60408201527f6365000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f474e42553a3a64656c656761746542795369673a20696e76616c69642073696760408201527f6e61747572650000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f474e42553a3a7065726d69743a207369676e6174757265206578706972656400604082015260600190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b6bffffffffffffffffffffffff91909116815260200190565b6bffffffffffffffffffffffff92831681529116602082015260400190565b60405181810167ffffffffffffffff81118282101715614d1d57614d1d614f77565b604052919050565b600067ffffffffffffffff821115614d3f57614d3f614f77565b5060209081020190565b60008219821115614d5c57614d5c614f19565b500190565b600063ffffffff808316818516808303821115614d8057614d80614f19565b01949350505050565b60006bffffffffffffffffffffffff808316818516808303821115614d8057614d80614f19565b600063ffffffff80841680614dc757614dc7614f48565b92169190910492915050565b60006bffffffffffffffffffffffff80841680614dc757614dc7614f48565b60006bffffffffffffffffffffffff80831681851681830481118215151615614e1d57614e1d614f19565b02949350505050565b600082821015614e3857614e38614f19565b500390565b600063ffffffff83811690831681811015614e5a57614e5a614f19565b039392505050565b60006bffffffffffffffffffffffff83811690831681811015614e5a57614e5a614f19565b600081614e9657614e96614f19565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614eee57614eee614f19565b5060010190565b600063ffffffff80831681811415614f0f57614f0f614f19565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114610bcf57600080fdfe474e42553a3a756e766573743a20616c726561647920756e76657374656420616d6f756e74206578636565647320746f556e76657374474e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365474e42553a3a6672656543697263756c6174696f6e3a20616d6f756e742065786365656420746f74616c537570706c79474e42553a3a6d756c7469766573743a20616d6f756e7420657863656564732039362062697473474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773474e42553a3a7065726d69743a20616d6f756e7420657863656564732039362062697473474e42553a3a62616c616e63654f663a20756e766573746564206578636565642076657374656420616d6f756e74474e42553a3a6275726e546f6b656e733a20616d6f756e7420657863656564732039362062697473474e42553a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473474e42553a3a5f766573743a2065786365656473206f776e65722062616c616e6365474e42553a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a617070726f76653a20616d6f756e7420657863656564732039362062697473474e42553a3a6672656543697263756c6174696f6e3a20616464696e67206f766572666c6f77474e42553a3a6d756c7469766573743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773474e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e74206578636565647320746f74616c20737570706c79474e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365474e42553a6d756c39363a20616d6f756e7420657863656564732075696e743936474e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773474e42553a3a766573743a20616d6f756e7420657863656564732039362062697473a26469706673582212200411e264d09cf94b2e62a762b827fd9c08eb09587de5a825361b0709c19f376664736f6c63430008000033