60806040526040518060800160405280604281526020016144d760429139600c908161002b9190610491565b5061019a600d5561012c600e556608e1bc9bf04000600f555f6010555f6011555f6012555f601355600160145f6101000a81548160ff021916908315150217905550348015610078575f80fd5b50336040518060400160405280600d81526020017f5265616c2050e1b49c6e6b7320000000000000000000000000000000000000008152506040518060400160405280600381526020017f5250430000000000000000000000000000000000000000000000000000000000815250815f90816100f49190610491565b5080600190816101049190610491565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610177575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161016e919061059f565b60405180910390fd5b6101868161019460201b60201c565b506001600b819055506105b8565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102d257607f821691505b6020821081036102e5576102e461028e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261030c565b610351868361030c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61039561039061038b84610369565b610372565b610369565b9050919050565b5f819050919050565b6103ae8361037b565b6103c26103ba8261039c565b848454610318565b825550505050565b5f90565b6103d66103ca565b6103e18184846103a5565b505050565b5b81811015610404576103f95f826103ce565b6001810190506103e7565b5050565b601f8211156104495761041a816102eb565b610423846102fd565b81016020851015610432578190505b61044661043e856102fd565b8301826103e6565b50505b505050565b5f82821c905092915050565b5f6104695f198460080261044e565b1980831691505092915050565b5f610481838361045a565b9150826002028217905092915050565b61049a82610257565b67ffffffffffffffff8111156104b3576104b2610261565b5b6104bd82546102bb565b6104c8828285610408565b5f60209050601f8311600181146104f9575f84156104e7578287015190505b6104f18582610476565b865550610558565b601f198416610507866102eb565b5f5b8281101561052e57848901518255600182019150602085019450602081019050610509565b8683101561054b5784890151610547601f89168261045a565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61058982610560565b9050919050565b6105998161057f565b82525050565b5f6020820190506105b25f830184610590565b92915050565b613f12806105c55f395ff3fe608060405260043610610266575f3560e01c8063715018a611610143578063b88d4fde116100b5578063d5abeb0111610079578063d5abeb01146108e2578063e43252d71461090c578063e985e9c514610934578063efdc778814610970578063f2fde38b14610998578063f6511f93146109c057610266565b8063b88d4fde14610800578063bc912e1a14610828578063c6a91b4214610852578063c87b56dd1461087c578063d547cfb7146108b857610266565b8063982d669e11610107578063982d669e1461070457806398710d1e1461072e5780639b19251a146107585780639e9fcffc14610794578063a0712d68146107bc578063a22cb465146107d857610266565b8063715018a61461064a5780638401f8d1146106605780638ab1d681146106885780638da5cb5b146106b057806395d89b41146106da57610266565b806323b872dd116101dc57806342842e0e116101a057806342842e0e1461051e5780634f6ccce71461054657806355f804b3146105825780636352211e146105aa5780636f8b44b0146105e657806370a082311461060e57610266565b806323b872dd1461045457806328cad13d1461047c5780632f745c59146104a45780633515fbdb146104e05780633ccfd60b1461050857610266565b80630a00ae831161022e5780630a00ae831461035e57806318160ddd146103865780631919fed7146103b0578063193ad7b4146103d85780631e84c41314610402578063202f298a1461042c57610266565b806301ffc9a71461026a57806306fdde03146102a657806307e89ec0146102d0578063081812fc146102fa578063095ea7b314610336575b5f80fd5b348015610275575f80fd5b50610290600480360381019061028b9190612e49565b6109fc565b60405161029d9190612e8e565b60405180910390f35b3480156102b1575f80fd5b506102ba610a75565b6040516102c79190612f17565b60405180910390f35b3480156102db575f80fd5b506102e4610b04565b6040516102f19190612f4f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190612f92565b610b0a565b60405161032d9190612ffc565b60405180910390f35b348015610341575f80fd5b5061035c6004803603810190610357919061303f565b610b25565b005b348015610369575f80fd5b50610384600480360381019061037f9190612f92565b610b3b565b005b348015610391575f80fd5b5061039a610b4d565b6040516103a79190612f4f565b60405180910390f35b3480156103bb575f80fd5b506103d660048036038101906103d19190612f92565b610b59565b005b3480156103e3575f80fd5b506103ec610b6b565b6040516103f99190612f4f565b60405180910390f35b34801561040d575f80fd5b50610416610b71565b6040516104239190612e8e565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d9190612f92565b610b83565b005b34801561045f575f80fd5b5061047a6004803603810190610475919061307d565b610b95565b005b348015610487575f80fd5b506104a2600480360381019061049d91906130f7565b610c94565b005b3480156104af575f80fd5b506104ca60048036038101906104c5919061303f565b610cb8565b6040516104d79190612f4f565b60405180910390f35b3480156104eb575f80fd5b5061050660048036038101906105019190612f92565b610d5c565b005b348015610513575f80fd5b5061051c610d6e565b005b348015610529575f80fd5b50610544600480360381019061053f919061307d565b610d92565b005b348015610551575f80fd5b5061056c60048036038101906105679190612f92565b610db1565b6040516105799190612f4f565b60405180910390f35b34801561058d575f80fd5b506105a860048036038101906105a3919061324e565b610e23565b005b3480156105b5575f80fd5b506105d060048036038101906105cb9190612f92565b610e3e565b6040516105dd9190612ffc565b60405180910390f35b3480156105f1575f80fd5b5061060c60048036038101906106079190612f92565b610e4f565b005b348015610619575f80fd5b50610634600480360381019061062f9190613295565b610e61565b6040516106419190612f4f565b60405180910390f35b348015610655575f80fd5b5061065e610f17565b005b34801561066b575f80fd5b506106866004803603810190610681919061331d565b610f2a565b005b348015610693575f80fd5b506106ae60048036038101906106a99190613295565b610fcd565b005b3480156106bb575f80fd5b506106c461102c565b6040516106d19190612ffc565b60405180910390f35b3480156106e5575f80fd5b506106ee611054565b6040516106fb9190612f17565b60405180910390f35b34801561070f575f80fd5b506107186110e4565b6040516107259190612f4f565b60405180910390f35b348015610739575f80fd5b506107426110ea565b60405161074f9190612f4f565b60405180910390f35b348015610763575f80fd5b5061077e60048036038101906107799190613295565b6110f0565b60405161078b9190612e8e565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b59190612f92565b61110d565b005b6107d660048036038101906107d19190612f92565b61111f565b005b3480156107e3575f80fd5b506107fe60048036038101906107f99190613368565b611482565b005b34801561080b575f80fd5b5061082660048036038101906108219190613444565b611498565b005b348015610833575f80fd5b5061083c6114b5565b6040516108499190612f4f565b60405180910390f35b34801561085d575f80fd5b506108666114bb565b6040516108739190612f4f565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190612f92565b6114c1565b6040516108af9190612f17565b60405180910390f35b3480156108c3575f80fd5b506108cc611598565b6040516108d99190612f17565b60405180910390f35b3480156108ed575f80fd5b506108f6611624565b6040516109039190612f4f565b60405180910390f35b348015610917575f80fd5b50610932600480360381019061092d9190613295565b61162a565b005b34801561093f575f80fd5b5061095a600480360381019061095591906134c4565b61168a565b6040516109679190612e8e565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190612f92565b611718565b005b3480156109a3575f80fd5b506109be60048036038101906109b99190613295565b6117f1565b005b3480156109cb575f80fd5b506109e660048036038101906109e19190612f92565b611875565b6040516109f39190612f4f565b60405180910390f35b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6e5750610a6d826118d2565b5b9050919050565b60605f8054610a839061352f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaf9061352f565b8015610afa5780601f10610ad157610100808354040283529160200191610afa565b820191905f5260205f20905b815481529060010190602001808311610add57829003601f168201915b5050505050905090565b600f5481565b5f610b14826119b3565b50610b1e82611a39565b9050919050565b610b378282610b32611a72565b611a79565b5050565b610b43611a8b565b8060118190555050565b5f600880549050905090565b610b61611a8b565b80600f8190555050565b60135481565b60145f9054906101000a900460ff1681565b610b8b611a8b565b8060128190555050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c05575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610bfc9190612ffc565b60405180910390fd5b5f610c188383610c13611a72565b611b12565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c8e578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610c859392919061355f565b60405180910390fd5b50505050565b610c9c611a8b565b8060145f6101000a81548160ff02191690831515021790555050565b5f610cc283610e61565b8210610d075782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610cfe929190613594565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b610d64611a8b565b8060108190555050565b610d76611a8b565b610d7e611c2c565b610d883347611c7b565b610d90611d64565b565b610dac83838360405180602001604052805f815250611498565b505050565b5f610dba610b4d565b8210610dff575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610df6929190613594565b60405180910390fd5b60088281548110610e1357610e126135bb565b5b905f5260205f2001549050919050565b610e2b611a8b565b80600c9081610e3a9190613785565b5050565b5f610e48826119b3565b9050919050565b610e57611a8b565b80600d8190555050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ed2575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610ec99190612ffc565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f1f611a8b565b610f285f611d6e565b565b610f32611a8b565b5f5b82829050811015610fc857600160155f858585818110610f5757610f566135bb565b5b9050602002016020810190610f6c9190613295565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610f34565b505050565b610fd5611a8b565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110639061352f565b80601f016020809104026020016040519081016040528092919081815260200182805461108f9061352f565b80156110da5780601f106110b1576101008083540402835291602001916110da565b820191905f5260205f20905b8154815290600101906020018083116110bd57829003601f168201915b5050505050905090565b60115481565b60125481565b6015602052805f5260405f205f915054906101000a900460ff1681565b611115611a8b565b80600e8190555050565b611127611c2c565b60145f9054906101000a900460ff16611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c9061389e565b60405180910390fd5b600d5481611181610b4d565b61118b91906138e9565b11156111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c390613966565b60405180910390fd5b5f6111d682611875565b905060155f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561123857816010546112359190613984565b90505b5f733169a4cb04057c790be4bf7c2df06846aa2427f090506011548360135461126191906138e9565b11156112f357348211156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613a0f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156112ed573d5f803e3d5ffd5b50611440565b6012548361130033610e61565b61130a91906138e9565b11156113e15734821115611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613a0f565b60405180910390fd5b600e54831115611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90613a9d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156113db573d5f803e3d5ffd5b5061143f565b601254831115611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90613a9d565b60405180910390fd5b8260135f82825461143791906138e9565b925050819055505b5b5f5b8381101561147457611467336001611458610b4d565b61146291906138e9565b611e31565b8080600101915050611442565b50505061147f611d64565b50565b61149461148d611a72565b8383611e4e565b5050565b6114a3848484610b95565b6114af84848484611fb7565b50505050565b60105481565b600e5481565b60605f6114cd83610e3e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361153d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153490613b2b565b60405180910390fd5b5f611546612169565b90505f8151116115645760405180602001604052805f81525061158f565b8061156e856121f9565b60405160200161157f929190613bcd565b6040516020818303038152906040525b92505050919050565b600c80546115a59061352f565b80601f01602080910402602001604051908101604052809291908181526020018280546115d19061352f565b801561161c5780601f106115f35761010080835404028352916020019161161c565b820191905f5260205f20905b8154815290600101906020018083116115ff57829003601f168201915b505050505081565b600d5481565b611632611a8b565b600160155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611720611a8b565b5f8111611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613c45565b60405180910390fd5b600d548161176e610b4d565b61177891906138e9565b11156117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090613cad565b60405180910390fd5b5f5b818110156117ed576117e03360016117d1610b4d565b6117db91906138e9565b611e31565b80806001019150506117bb565b5050565b6117f9611a8b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611869575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016118609190612ffc565b60405180910390fd5b61187281611d6e565b50565b5f6001820361188d57661c6cdba6cd2c0090506118cd565b600782036118a45766232bff5f46c00090506118cd565b603282036118bc5767013fbe85edc9000090506118cd565b81600f546118ca9190613984565b90505b919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061199c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119ac57506119ab826122c3565b5b9050919050565b5f806119be8361232c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a3057826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611a279190612f4f565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b611a868383836001612365565b505050565b611a93611a72565b73ffffffffffffffffffffffffffffffffffffffff16611ab161102c565b73ffffffffffffffffffffffffffffffffffffffff1614611b1057611ad4611a72565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611b079190612ffc565b60405180910390fd5b565b5f80611b1f858585612524565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b6257611b5d8461272f565b611ba1565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ba057611b9f8185612773565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611be257611bdd846128bd565b611c21565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c2057611c1f858561297d565b5b5b809150509392505050565b6002600b5403611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890613d15565b60405180910390fd5b6002600b81905550565b80471015611cc057306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401611cb79190612ffc565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051611ce590613d60565b5f6040518083038185875af1925050503d805f8114611d1f576040519150601f19603f3d011682016040523d82523d5f602084013e611d24565b606091505b5050905080611d5f576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6001600b81905550565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e4a828260405180602001604052805f815250612a01565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ebe57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611eb59190612ffc565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611faa9190612e8e565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115612163578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ffa611a72565b8685856040518563ffffffff1660e01b815260040161201c9493929190613dc6565b6020604051808303815f875af192505050801561205757506040513d601f19601f820116820180604052508101906120549190613e24565b60015b6120d8573d805f8114612085576040519150601f19603f3d011682016040523d82523d5f602084013e61208a565b606091505b505f8151036120d057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016120c79190612ffc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461216157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016121589190612ffc565b60405180910390fd5b505b50505050565b6060600c80546121789061352f565b80601f01602080910402602001604051908101604052809291908181526020018280546121a49061352f565b80156121ef5780601f106121c6576101008083540402835291602001916121ef565b820191905f5260205f20905b8154815290600101906020018083116121d257829003601f168201915b5050505050905090565b60605f600161220784612a1c565b0190505f8167ffffffffffffffff8111156122255761222461312a565b5b6040519080825280601f01601f1916602001820160405280156122575781602001600182028036833780820191505090505b5090505f82602001820190505b6001156122b8578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816122ad576122ac613e4f565b5b0494505f8503612264575b819350505050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061239d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124cf575f6123ac846119b3565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561241657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156124295750612427818461168a565b155b1561246b57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016124629190612ffc565b60405180910390fd5b81156124cd57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f8061252f8461232c565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125705761256f818486612b6d565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146125fb576125af5f855f80612365565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461267a57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f61277d83610e61565b90505f60075f8481526020019081526020015f20549050818114612854575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506128d09190613e7c565b90505f60095f8481526020019081526020015f205490505f600883815481106128fc576128fb6135bb565b5b905f5260205f2001549050806008838154811061291c5761291b6135bb565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061296457612963613eaf565b5b600190038181905f5260205f20015f9055905550505050565b5f600161298984610e61565b6129939190613e7c565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b612a0b8383612c30565b612a175f848484611fb7565b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612a78577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612a6e57612a6d613e4f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612ab5576d04ee2d6d415b85acef81000000008381612aab57612aaa613e4f565b5b0492506020810190505b662386f26fc100008310612ae457662386f26fc100008381612ada57612ad9613e4f565b5b0492506010810190505b6305f5e1008310612b0d576305f5e1008381612b0357612b02613e4f565b5b0492506008810190505b6127108310612b32576127108381612b2857612b27613e4f565b5b0492506004810190505b60648310612b555760648381612b4b57612b4a613e4f565b5b0492506002810190505b600a8310612b64576001810190505b80915050919050565b612b78838383612d23565b612c2b575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bec57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612be39190612f4f565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612c22929190613594565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca0575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612c979190612ffc565b60405180910390fd5b5f612cac83835f611b12565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612d1e575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401612d159190612ffc565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612dda57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d9b5750612d9a848461168a565b5b80612dd957508273ffffffffffffffffffffffffffffffffffffffff16612dc183611a39565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2881612df4565b8114612e32575f80fd5b50565b5f81359050612e4381612e1f565b92915050565b5f60208284031215612e5e57612e5d612dec565b5b5f612e6b84828501612e35565b91505092915050565b5f8115159050919050565b612e8881612e74565b82525050565b5f602082019050612ea15f830184612e7f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ee982612ea7565b612ef38185612eb1565b9350612f03818560208601612ec1565b612f0c81612ecf565b840191505092915050565b5f6020820190508181035f830152612f2f8184612edf565b905092915050565b5f819050919050565b612f4981612f37565b82525050565b5f602082019050612f625f830184612f40565b92915050565b612f7181612f37565b8114612f7b575f80fd5b50565b5f81359050612f8c81612f68565b92915050565b5f60208284031215612fa757612fa6612dec565b5b5f612fb484828501612f7e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612fe682612fbd565b9050919050565b612ff681612fdc565b82525050565b5f60208201905061300f5f830184612fed565b92915050565b61301e81612fdc565b8114613028575f80fd5b50565b5f8135905061303981613015565b92915050565b5f806040838503121561305557613054612dec565b5b5f6130628582860161302b565b925050602061307385828601612f7e565b9150509250929050565b5f805f6060848603121561309457613093612dec565b5b5f6130a18682870161302b565b93505060206130b28682870161302b565b92505060406130c386828701612f7e565b9150509250925092565b6130d681612e74565b81146130e0575f80fd5b50565b5f813590506130f1816130cd565b92915050565b5f6020828403121561310c5761310b612dec565b5b5f613119848285016130e3565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61316082612ecf565b810181811067ffffffffffffffff8211171561317f5761317e61312a565b5b80604052505050565b5f613191612de3565b905061319d8282613157565b919050565b5f67ffffffffffffffff8211156131bc576131bb61312a565b5b6131c582612ecf565b9050602081019050919050565b828183375f83830152505050565b5f6131f26131ed846131a2565b613188565b90508281526020810184848401111561320e5761320d613126565b5b6132198482856131d2565b509392505050565b5f82601f83011261323557613234613122565b5b81356132458482602086016131e0565b91505092915050565b5f6020828403121561326357613262612dec565b5b5f82013567ffffffffffffffff8111156132805761327f612df0565b5b61328c84828501613221565b91505092915050565b5f602082840312156132aa576132a9612dec565b5b5f6132b78482850161302b565b91505092915050565b5f80fd5b5f80fd5b5f8083601f8401126132dd576132dc613122565b5b8235905067ffffffffffffffff8111156132fa576132f96132c0565b5b602083019150836020820283011115613316576133156132c4565b5b9250929050565b5f806020838503121561333357613332612dec565b5b5f83013567ffffffffffffffff8111156133505761334f612df0565b5b61335c858286016132c8565b92509250509250929050565b5f806040838503121561337e5761337d612dec565b5b5f61338b8582860161302b565b925050602061339c858286016130e3565b9150509250929050565b5f67ffffffffffffffff8211156133c0576133bf61312a565b5b6133c982612ecf565b9050602081019050919050565b5f6133e86133e3846133a6565b613188565b90508281526020810184848401111561340457613403613126565b5b61340f8482856131d2565b509392505050565b5f82601f83011261342b5761342a613122565b5b813561343b8482602086016133d6565b91505092915050565b5f805f806080858703121561345c5761345b612dec565b5b5f6134698782880161302b565b945050602061347a8782880161302b565b935050604061348b87828801612f7e565b925050606085013567ffffffffffffffff8111156134ac576134ab612df0565b5b6134b887828801613417565b91505092959194509250565b5f80604083850312156134da576134d9612dec565b5b5f6134e78582860161302b565b92505060206134f88582860161302b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061354657607f821691505b60208210810361355957613558613502565b5b50919050565b5f6060820190506135725f830186612fed565b61357f6020830185612f40565b61358c6040830184612fed565b949350505050565b5f6040820190506135a75f830185612fed565b6135b46020830184612f40565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613609565b61364e8683613609565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61368961368461367f84612f37565b613666565b612f37565b9050919050565b5f819050919050565b6136a28361366f565b6136b66136ae82613690565b848454613615565b825550505050565b5f90565b6136ca6136be565b6136d5818484613699565b505050565b5b818110156136f8576136ed5f826136c2565b6001810190506136db565b5050565b601f82111561373d5761370e816135e8565b613717846135fa565b81016020851015613726578190505b61373a613732856135fa565b8301826136da565b50505b505050565b5f82821c905092915050565b5f61375d5f1984600802613742565b1980831691505092915050565b5f613775838361374e565b9150826002028217905092915050565b61378e82612ea7565b67ffffffffffffffff8111156137a7576137a661312a565b5b6137b1825461352f565b6137bc8282856136fc565b5f60209050601f8311600181146137ed575f84156137db578287015190505b6137e5858261376a565b86555061384c565b601f1984166137fb866135e8565b5f5b82811015613822578489015182556001820191506020850194506020810190506137fd565b8683101561383f578489015161383b601f89168261374e565b8355505b6001600288020188555050505b505050505050565b7f5075626c69632073616c65206973206e6f74206f70656e0000000000000000005f82015250565b5f613888601783612eb1565b915061389382613854565b602082019050919050565b5f6020820190508181035f8301526138b58161387c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6138f382612f37565b91506138fe83612f37565b9250828201905080821115613916576139156138bc565b5b92915050565b7f4e6f206d6f726520746f6b656e7320617661696c61626c6500000000000000005f82015250565b5f613950601883612eb1565b915061395b8261391c565b602082019050919050565b5f6020820190508181035f83015261397d81613944565b9050919050565b5f61398e82612f37565b915061399983612f37565b92508282026139a781612f37565b915082820484148315176139be576139bd6138bc565b5b5092915050565b7f496e636f7272656374204554482076616c75652073656e7400000000000000005f82015250565b5f6139f9601883612eb1565b9150613a04826139c5565b602082019050919050565b5f6020820190508181035f830152613a26816139ed565b9050919050565b7f4d6178206d696e747320706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a87602283612eb1565b9150613a9282613a2d565b604082019050919050565b5f6020820190508181035f830152613ab481613a7b565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f613b15602f83612eb1565b9150613b2082613abb565b604082019050919050565b5f6020820190508181035f830152613b4281613b09565b9050919050565b5f81905092915050565b5f613b5d82612ea7565b613b678185613b49565b9350613b77818560208601612ec1565b80840191505092915050565b7f2f000000000000000000000000000000000000000000000000000000000000005f82015250565b5f613bb7600183613b49565b9150613bc282613b83565b600182019050919050565b5f613bd88285613b53565b9150613be382613bab565b9150613bef8284613b53565b91508190509392505050565b7f496e76616c6964206d696e7420616d6f756e74000000000000000000000000005f82015250565b5f613c2f601383612eb1565b9150613c3a82613bfb565b602082019050919050565b5f6020820190508181035f830152613c5c81613c23565b9050919050565b7f4d6178696d756d20737570706c792065786365656465640000000000000000005f82015250565b5f613c97601783612eb1565b9150613ca282613c63565b602082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f613cff601f83612eb1565b9150613d0a82613ccb565b602082019050919050565b5f6020820190508181035f830152613d2c81613cf3565b9050919050565b5f81905092915050565b50565b5f613d4b5f83613d33565b9150613d5682613d3d565b5f82019050919050565b5f613d6a82613d40565b9150819050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613d9882613d74565b613da28185613d7e565b9350613db2818560208601612ec1565b613dbb81612ecf565b840191505092915050565b5f608082019050613dd95f830187612fed565b613de66020830186612fed565b613df36040830185612f40565b8181036060830152613e058184613d8e565b905095945050505050565b5f81519050613e1e81612e1f565b92915050565b5f60208284031215613e3957613e38612dec565b5b5f613e4684828501613e10565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e8682612f37565b9150613e9183612f37565b9250828203905081811115613ea957613ea86138bc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212206992dbf2ad632ed0cb970f77065366709729f34f098b8a087f1c8e8ac04cae1464736f6c634300081a0033697066733a2f2f62616679626569616f3579677a326a6a6565763473663269697a68786c3674726a3671743363686b6d796e686162707a656a6678637361326a7334