0x608060405234801561000f575f80fd5b506040518060400160405280600a81526020017f4c696d697465644e4654000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c4e465400000000000000000000000000000000000000000000000000000000815250815f908161008a91906102e3565b50806001908161009a91906102e3565b5050505f6006819055506103b2565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061012457607f821691505b602082108103610137576101366100e0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261015e565b6101a3868361015e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e76101e26101dd846101bb565b6101c4565b6101bb565b9050919050565b5f819050919050565b610200836101cd565b61021461020c826101ee565b84845461016a565b825550505050565b5f90565b61022861021c565b6102338184846101f7565b505050565b5b818110156102565761024b5f82610220565b600181019050610239565b5050565b601f82111561029b5761026c8161013d565b6102758461014f565b81016020851015610284578190505b6102986102908561014f565b830182610238565b50505b505050565b5f82821c905092915050565b5f6102bb5f19846008026102a0565b1980831691505092915050565b5f6102d383836102ac565b9150826002028217905092915050565b6102ec826100a9565b67ffffffffffffffff811115610305576103046100b3565b5b61030f825461010d565b61031a82828561025a565b5f60209050601f83116001811461034b575f8415610339578287015190505b61034385826102c8565b8655506103aa565b601f1984166103598661013d565b5f5b828110156103805784890151825560018201915060208501945060208101905061035b565b8683101561039d5784890151610399601f8916826102ac565b8355505b6001600288020188555050505b505050505050565b611eb7806103bf5f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c80636352211e11610095578063b88d4fde11610064578063b88d4fde14610296578063c87b56dd146102b2578063d082e381146102e2578063e985e9c514610300576100fe565b80636352211e146101fc57806370a082311461022c57806395d89b411461025c578063a22cb4651461027a576100fe565b806314f710fe116100d157806314f710fe1461019c57806323b872dd146101a657806332cb6b0c146101c257806342842e0e146101e0576100fe565b806301ffc9a71461010257806306fdde0314610132578063081812fc14610150578063095ea7b314610180575b5f80fd5b61011c60048036038101906101179190611686565b610330565b60405161012991906116cb565b60405180910390f35b61013a610411565b6040516101479190611754565b60405180910390f35b61016a600480360381019061016591906117a7565b6104a0565b6040516101779190611811565b60405180910390f35b61019a60048036038101906101959190611854565b6104bb565b005b6101a46104d1565b005b6101c060048036038101906101bb9190611892565b61053b565b005b6101ca61063a565b6040516101d791906118f1565b60405180910390f35b6101fa60048036038101906101f59190611892565b61063f565b005b610216600480360381019061021191906117a7565b61065e565b6040516102239190611811565b60405180910390f35b6102466004803603810190610241919061190a565b61066f565b60405161025391906118f1565b60405180910390f35b610264610725565b6040516102719190611754565b60405180910390f35b610294600480360381019061028f919061195f565b6107b5565b005b6102b060048036038101906102ab9190611ac9565b6107cb565b005b6102cc60048036038101906102c791906117a7565b6107e8565b6040516102d99190611754565b60405180910390f35b6102ea61084e565b6040516102f791906118f1565b60405180910390f35b61031a60048036038101906103159190611b49565b610854565b60405161032791906116cb565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103fa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061040a5750610409826108e2565b5b9050919050565b60605f805461041f90611bb4565b80601f016020809104026020016040519081016040528092919081815260200182805461044b90611bb4565b80156104965780601f1061046d57610100808354040283529160200191610496565b820191905f5260205f20905b81548152906001019060200180831161047957829003601f168201915b5050505050905090565b5f6104aa8261094b565b506104b4826109d1565b9050919050565b6104cd82826104c8610a0a565b610a11565b5050565b606460065410610516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050d90611c2e565b60405180910390fd5b61052233600654610a23565b60065f81548092919061053490611c79565b9190505550565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105ab575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105a29190611811565b60405180910390fd5b5f6105be83836105b9610a0a565b610a40565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610634578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161062b93929190611cc0565b60405180910390fd5b50505050565b606481565b61065983838360405180602001604052805f8152506107cb565b505050565b5f6106688261094b565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106e0575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106d79190611811565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606001805461073490611bb4565b80601f016020809104026020016040519081016040528092919081815260200182805461076090611bb4565b80156107ab5780601f10610782576101008083540402835291602001916107ab565b820191905f5260205f20905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b6107c76107c0610a0a565b8383610c4b565b5050565b6107d684848461053b565b6107e284848484610db4565b50505050565b60606107f38261094b565b505f6107fd610f66565b90505f81511161081b5760405180602001604052805f815250610846565b8061082584610f7c565b604051602001610836929190611d2f565b6040516020818303038152906040525b915050919050565b60065481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061095683611046565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109c857826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109bf91906118f1565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610a1e838383600161107f565b505050565b610a3c828260405180602001604052805f81525061123e565b5050565b5f80610a4b84611046565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a8c57610a8b818486611259565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b1757610acb5f855f8061107f565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b9657600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cbb57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610cb29190611811565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610da791906116cb565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115610f60578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610df7610a0a565b8685856040518563ffffffff1660e01b8152600401610e199493929190611da4565b6020604051808303815f875af1925050508015610e5457506040513d601f19601f82011682018060405250810190610e519190611e02565b60015b610ed5573d805f8114610e82576040519150601f19603f3d011682016040523d82523d5f602084013e610e87565b606091505b505f815103610ecd57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610ec49190611811565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f5e57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f559190611811565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b60605f6001610f8a8461131c565b0190505f8167ffffffffffffffff811115610fa857610fa76119a5565b5b6040519080825280601f01601f191660200182016040528015610fda5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561103b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816110305761102f611e2d565b5b0494505f8503610fe7575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110b757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156111e9575f6110c68461094b565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561113057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561114357506111418184610854565b155b1561118557826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161117c9190611811565b60405180910390fd5b81156111e757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611248838361146d565b6112545f848484610db4565b505050565b611264838383611560565b611317575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d857806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112cf91906118f1565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161130e929190611e5a565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611378577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161136e5761136d611e2d565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106113b5576d04ee2d6d415b85acef810000000083816113ab576113aa611e2d565b5b0492506020810190505b662386f26fc1000083106113e457662386f26fc1000083816113da576113d9611e2d565b5b0492506010810190505b6305f5e100831061140d576305f5e100838161140357611402611e2d565b5b0492506008810190505b612710831061143257612710838161142857611427611e2d565b5b0492506004810190505b60648310611455576064838161144b5761144a611e2d565b5b0492506002810190505b600a8310611464576001810190505b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114dd575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016114d49190611811565b60405180910390fd5b5f6114e983835f610a40565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461155b575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016115529190611811565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561161757508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115d857506115d78484610854565b5b8061161657508273ffffffffffffffffffffffffffffffffffffffff166115fe836109d1565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61166581611631565b811461166f575f80fd5b50565b5f813590506116808161165c565b92915050565b5f6020828403121561169b5761169a611629565b5b5f6116a884828501611672565b91505092915050565b5f8115159050919050565b6116c5816116b1565b82525050565b5f6020820190506116de5f8301846116bc565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611726826116e4565b61173081856116ee565b93506117408185602086016116fe565b6117498161170c565b840191505092915050565b5f6020820190508181035f83015261176c818461171c565b905092915050565b5f819050919050565b61178681611774565b8114611790575f80fd5b50565b5f813590506117a18161177d565b92915050565b5f602082840312156117bc576117bb611629565b5b5f6117c984828501611793565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117fb826117d2565b9050919050565b61180b816117f1565b82525050565b5f6020820190506118245f830184611802565b92915050565b611833816117f1565b811461183d575f80fd5b50565b5f8135905061184e8161182a565b92915050565b5f806040838503121561186a57611869611629565b5b5f61187785828601611840565b925050602061188885828601611793565b9150509250929050565b5f805f606084860312156118a9576118a8611629565b5b5f6118b686828701611840565b93505060206118c786828701611840565b92505060406118d886828701611793565b9150509250925092565b6118eb81611774565b82525050565b5f6020820190506119045f8301846118e2565b92915050565b5f6020828403121561191f5761191e611629565b5b5f61192c84828501611840565b91505092915050565b61193e816116b1565b8114611948575f80fd5b50565b5f8135905061195981611935565b92915050565b5f806040838503121561197557611974611629565b5b5f61198285828601611840565b92505060206119938582860161194b565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6119db8261170c565b810181811067ffffffffffffffff821117156119fa576119f96119a5565b5b80604052505050565b5f611a0c611620565b9050611a1882826119d2565b919050565b5f67ffffffffffffffff821115611a3757611a366119a5565b5b611a408261170c565b9050602081019050919050565b828183375f83830152505050565b5f611a6d611a6884611a1d565b611a03565b905082815260208101848484011115611a8957611a886119a1565b5b611a94848285611a4d565b509392505050565b5f82601f830112611ab057611aaf61199d565b5b8135611ac0848260208601611a5b565b91505092915050565b5f805f8060808587031215611ae157611ae0611629565b5b5f611aee87828801611840565b9450506020611aff87828801611840565b9350506040611b1087828801611793565b925050606085013567ffffffffffffffff811115611b3157611b3061162d565b5b611b3d87828801611a9c565b91505092959194509250565b5f8060408385031215611b5f57611b5e611629565b5b5f611b6c85828601611840565b9250506020611b7d85828601611840565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611bcb57607f821691505b602082108103611bde57611bdd611b87565b5b50919050565b7f4d617820737570706c79207265616368656400000000000000000000000000005f82015250565b5f611c186012836116ee565b9150611c2382611be4565b602082019050919050565b5f6020820190508181035f830152611c4581611c0c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c8382611774565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611cb557611cb4611c4c565b5b600182019050919050565b5f606082019050611cd35f830186611802565b611ce060208301856118e2565b611ced6040830184611802565b949350505050565b5f81905092915050565b5f611d09826116e4565b611d138185611cf5565b9350611d238185602086016116fe565b80840191505092915050565b5f611d3a8285611cff565b9150611d468284611cff565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611d7682611d52565b611d808185611d5c565b9350611d908185602086016116fe565b611d998161170c565b840191505092915050565b5f608082019050611db75f830187611802565b611dc46020830186611802565b611dd160408301856118e2565b8181036060830152611de38184611d6c565b905095945050505050565b5f81519050611dfc8161165c565b92915050565b5f60208284031215611e1757611e16611629565b5b5f611e2484828501611dee565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050611e6d5f830185611802565b611e7a60208301846118e2565b939250505056fea2646970667358221220f0e6f46110a6540b0591b4cc994d649ec25412fb46776d7abc46cb384236b50564736f6c634300081a0033