aoc2022

Advent of Code 2022 solutions in Perl.
git clone git://git.samirparikh.com/aoc2022
Log | Files | Refs | README

commit bc608fcb0fad5d0e6357e0d4b8ff56df0d94755d
parent 423ad4564eca1a9d5460185723ce1816e983a040
Author: Samir Parikh <noreply@samirparikh.com>
Date:   Wed, 21 Dec 2022 18:12:32 +0000

solve part 1 of day03

Diffstat:
Aday03/day03.pl | 29+++++++++++++++++++++++++++++
Aday03/input | 301+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday03/test | 6++++++
3 files changed, 336 insertions(+), 0 deletions(-)

diff --git a/day03/day03.pl b/day03/day03.pl @@ -0,0 +1,29 @@ +#!/usr/local/bin/perl +# day 2022-03 + +use strict; +use warnings; +use v5.32; + +@ARGV = "input" unless @ARGV; +chomp( my $input = do { local $/; <> } ); + +my @rucksacks = split /\n/, $input; +my $part1 = 0; + +foreach my $rucksack ( @rucksacks ) { + my $compartment1 = substr( $rucksack, 0, ( length $rucksack ) / 2 ); + my $compartment2 = substr( $rucksack, ( length $rucksack ) / 2 ); + foreach my $item ( split //, $compartment1 ) { + if ( $compartment2 =~ m/$item/ ) { + if ( $item =~ m/[a-z]/ ) { + $part1 += ord( $item ) - ord( 'a' ) + 1; + } else { + $part1 += ord( $item ) - ord( 'A' ) + 27; + } + last; + } + } +} + +say "part 1: ", $part1; diff --git a/day03/input b/day03/input @@ -0,0 +1,301 @@ +lDDWVvlVVQfDMlWjGJTRjQCgTGLCLj +ZLZpwzLBhwZhSLBsjntGCtgJRjbnJgSG +qppdZzzsdsmZphrNsNwZhllDHLcVVDWFPvFWcWdFlv +ztdhgJDBJghmQtPFQPpmbw +lVlLRcnfllcfVcccGnSQVLcsTPFbpwsPFspTSqmbpswpbF +cCHRGcGcCRGlGrGcVGnrdWHWBDzBNhhQZWWNBhJz +NfnSSQpdnRSSpvWdSsjZDGNDjGDwTGTjHG +wlPzPqzPFbMmqPCFCJmbsjbHLDDHDZjDjbGHsT +gwMlgmtmPcqVVvhVnvcRnn +cBNBBCHhbhNhblBcCCvcBHSwTwDQSqRwDQpDRsjHST +dPmzMVWdmmMnnZJtZVdqjTSrjTjrpQrsTTVwQRSj +qzmZMmdZPtnGqclblGlbGvgBFc +ZfpmNDfRhzbbqDnD +SFtFjTTZVTFvVTjHrsVvqGBJqhnSSnbJznLGJwJq +TjdPPtdMPPWCcZgW +qsbmGCsjHNhmhmhzTDznpnlQZlbWlZ +LTSSfSvggVVgBgfLtvvtTSczzpWnZQZnlnzpBcnWpQWc +FrLvrrrVPgdPftSHHdNsjTHjmGThhm +wGQlMjvMwpvjvZjZTZlWjplWJJTggDTgfCnntPgTJPbtPgSP +qNhJmcVmdJqhHnPnDNtnPDCg +LrrchqhRdLVzRdmhJcFFQWGGMjpGlvZzlQQv +ZqZMbZMfQZptpjlF +PJCggvHlwWHvSSvCJNvSPvDBtFDQThFQjtRQhhFTsVThQtsF +PwWCnBBCClcMMznMdG +rNwwQJrJrnQswrQrRRwCShBSLndZpdnhpGFSdhBp +PvzzWVzbclGFhLFGdZll +VWjPWvbjcVbVcGVzjcgzgwQQRRRrqwRJQwwstCRR +zjBMMzznjbssrBrMBbvHDmrlprlrpwGpwQDV +LhRwPPTLLNRZqScPWPWPTSmQvQQDGGdQHVDlmVpQGD +NtfhNwhLLNwRwRNcTBgnJMCBzsBFjsJfCz +jZjsWNDlPfClfMlM +GjqbVSqjhgvgSVSBCPmMmCmfpwTBfh +nGbjqtqcGzsLDFcJLs +ZQtmZdtdQcLndRncdQQLFjWWDHNPfhpnqhqsHNNDnpHs +TrMBGbJTwwlmDPPPWshWHfJq +wmVzbrwbwvBlBlVGtSVLSdFjdFtdjLVR +LBhZFhRPbbnPddMdPPlD +NQszQNczlCSlJSsg +mwmrVQwpQVWwTlvBpHHHFhZj +pzzDffWpQBzMpHvzMfRnTNhZdrdBcnLrcdrTLZ +msgJgtmbgmqJJcdrGcJjGn +bSVPgwntmVnngQWvWSSMpMMHWH +gmGMDHHdpngdrGmGcwbNCCnNcbbCSLwL +zQPPPffQQlVlsPFQFzQchZZbLZNVcbqbNqbZgq +PRjQzfRgRfjQBTfJQTlPFRHWmmvmWHGWrWvWWtjrdHpD +vfrHfqrLfLwwNHdvnthpnnFFpstn +gWcMclgmcRcWgDMWgBgGGFnntqQnGphdQhtbdFnh +qRWmRDlcDqWBBPwPNrZHrwSHjTfr +HVVbhdCdndhZSShMzRrzSM +qBjWqvtWvDJjTjjGJtJtnqBvZMrgSGZlgfSgSRrMQGQRMgMR +wmwtJsvjtTJwsNnVsHpdnsHdds +FCJNZDMPNCNvzqQJHqzGqv +hwjWcSTHwRpSWnQtGgQgGStgQQ +WpwhRHTRpcLRjwlwwTWBcWdlFbCrsPrrLCMDrZCFsCDPrZPM +DJjjShSGhGDSNdpfrWWcLFzrDWrDlF +wtqZgwMBBPVMCBPQggMwqMMzfLlWrWLLzsWcFzTzVTzLss +tgtwQqZBQQZbBZtPgbHpNJnJShcmJppSHh +tHrWmrdzzdHflmHmHrSmqswlqhqNgssMhGgghssn +pJcCBPPQPCcPpRpgwZNZBMnDhMsMBw +RJCvRRVcQpjLpCJPWrftWvSnrFffWbrz +jzlwwzDzTlQftzlWjfrBGBgVHBgpgBtPGVtP +vhsshbMbNhZpgZrrrpHcZr +qhdMqqSLSSbSJMqqSwwjzFzmjFQQFfHzLQ +gDhHNnphPPPNCprHFhHFdbdczzjNqbzjVcdbQTcc +tVJWBtVVZRWtjQbctjqcdj +RfvlGLvLLLlLMZBmZBRhHDVPnVHPHCgFCnhlpn +RFhZFTZvFdjlqqlRNCPwSSPCNPBSwC +spHGswpnWgJLLJCPGg +cWpDrVVbWfWbVfbsdQqcQzjjzlhdwqll +WWJPpQwWdQQPNpQvqlvvCblbvbvwLL +cmRMBMBTbSrTDRMcGBscTGfLZfvfvsCqhLlChZlLhfsC +TVbzGSMGVVgdpdPJpQ +lwsFfsZWGsGmsnlGQcPdBBdMbcPHfcCN +RVvSLtSTrTVrTFPcBdCHRcPHbNNb +LrqzLFTLrgSJLLLtTgJjVJvWlDDnjDWnWWlhlGWGhZWZhn +GQJCMGbrMbbCGrrGtcwhctGjNSvWpVVVRjNJqVqqBBRRJq +ssnglHHsnHzFmHnzHFPVDDSDRgVjvWDNpSSNpB +PZfHmndFzzfPZPZfCdwchwGcbwwhCdMW +DRGVQGmGQVnnGVmnnFpNbzCNRbRttCbpLztC +qdqHBdjTqPlcTchBjJMvvvLtLCcLggLvtmgb +fqhlHjdwqjjJTwldDmDmrGrrWFrDGZwD +wFscLVLrrVhwWgZPrcswgZWFTnQdtTMnpQtjdpqdqvqQMt +JRbHmmbDDSzDmDNpTnBBdpMHQtqtvp +JmCCbvRGzbbGJsLgZsVhgLwwGW +WDQwsBzWbBlMjdVpzTJVMj +fncRngntnPCpJgmdFpFWgm +RGZPZtZCfvWSvRZGSLvPccHwsrHbwHLrwHHQQsBDbllB +PlNZhwgpppccgrqVvttbBfrlls +CznSDDdHDRnRStVsVfDvfrtDZq +QCddZFSFLTmccQmw +rnwfVnclGPPFfSPSqBWZvvBBWqZvqWFh +zLgLQgJssspmQTJmsgjZNmqqzqdHbthDdDDWHbhqBBqb +QgmmjpNgCCZpjJLpmTrfrSrVRPfnrClfPwnS +zDzPPwvwqvPPBqjnqvDqBffSfcSNJpNVfccLLNffBR +MdTMZbgbmmTWGGdmssRCSNsSNVVVcJsNppsC +MJghbhHhbtMMdWhbJhHgdmWvnFzHDQPDjQDvHHwvQwvzwF +gGbqqRDrqDMdcBpVlpMG +WzhPCnWfqMcpBnnNLZ +fCqPHHJCfJhStwhWHbrrgvjFgbQbSbmbQs +fhcchnSpfsNpjVVqnqjrGHqq +zzlFLlPLWdggFqRBjqsrHrBTzz +FDwgFLZWlbbchpwshsCNcw +CmPlqqRJDHRDDsFv +MfSpBQQNNfBfrfVZsmVVdzzrHZmH +QSBSLSgmQBmwPCtgClhjPP +NPNsHHHNsPsvHwDqgpwlqt +rTRWSRrWRzgTzZrRVVLRQzjpbtmmGLlGDDbDwwmtblvDvw +nRzSRrjSVRrnjrgZfrfzNdPdMPBfBMhJhhBcPhcJ +LLhzQSDHDHNpNzHHJBQBMvMBqBRJBBqw +rmbdtmlWCCMnvJrn +FTVdmVgtjdtbWsvjjmdLSDcgHpDzShzDLPLSHh +VFFJQVWHtQVHHWbJRRRHwqPvpMLpLZZWLwlwMllL +jsngsdGssLvlqnZqZw +hhmfDjDsmDNjjNRNVqNVJRtQHJ +jvTnffrgFTwvqMzqGdMMSW +sPbCtCCQQLffZGdWNLWDDzLzGM +PQPBBtfZCZsmJPPplwwmTwpcTcmcgj +NBmBRCCsBTRNTndGdswnlwvwnw +fvbqrbPLqpGwScGGwbbb +HJDPJFJLJtpJHCvCFBBBBNNWvF +HJHgNQJBSlRRbJDRDb +RptsfnshscWMLMZDZp +njmrnPznnsTRTtPzFzRTswgQwqvVVwBNwwvjqCHqHq +CBMgBJCTNgQcsQspPpWjRrWrsWsn +mwLvHLGbdHbGzSHmvmvHzrhjjjPptjWGqZPPZhPRWWGP +vbbrLFwLFDJFDfFN +TnPvZSnQgQPHnnnQvgMSWppWNfWRpWfMtthMNDhN +wLJmLBmGFBFdLBbCBbVCVlsGsWhtHqthRRhqhtHHGqqf +LmHLbCjjBLVZzZSgzQgjrc +wdSwfpBhtFbStpftjSVhBwFrGrsQnQgnGrQmqCPmDrmmDb +zJvzLJLNZNscLzNHHLrGPvGGPrDDqGgDPDgC +RWsNNRMsHTHLHTlMczLHZLWtpFwfpthSjFtwFhjSVplwtj +QbrBDLGGRJMQJQJDbQbGvNscWNnTdvnvtnLcccvl +fqZgpVPZHPmfgPPjBFgcscvNNccdddtdNvdFTs +CgPpghfjjPgVmfBMMCRJQQJzJBwM +jLWDqLdWdwLfHwJwzSSfwS +gCgRRltMrlrCcCMzcBSVfZQfVNZNVSBVNNNh +gMrcPntccGgzgTMlMPrtDWFvLqqdLnDsmLLFFqvp +ttHJNccRRwmnsnHnHWMSwqfgvgfwSQZfQf +ShpLhhzTPBMpQqQgvM +zhbFjVdrjFjVljrVbdPddSTPHNssHnHlRNCHtRtsctJtGsRJ +zMVTscVhQhGGhClv +LfMJmgSBpLRfHmBPgpmJPSBdvQNtlHvrHvNNtNNNClGdGN +JFJmmSFFbFFbRJPBgFPmSBPMzzWWTDjjTsTqqwjVWbjjVVsZ +HZpCnwnggfFggbgLDcTb +SjvWjGzNGGzRjSGmMcLhvhMhFMCcmv +rjrVJNjVrzVNPrwtPwPCHBPB +SWwFbTzsSjPzpjFbsWPTWTcWLCLgLgLBZjGVDjCVBBgCBGCZ +lrJJttQcHqrHrvggHVBgBLffBC +lnhhcqNRJWzhTdsWFz +vzldvzlclbFjFvmtjZ +DDNMNStMsSsGnhSMwQjTQVgVbwMbVTTQ +DsDSCNNGpLtsNLpnNsqLppDzCBcdJHBzllcJfzJBPBdBlR +qWNfDvffbJBFDpNfmpbwhGhwjLgTrGwhbGGwrj +ZctMVCcVVQtTpthlnLtppw +QMcRSPMZcpCZqDFNRFHNJFFF +RmztpGSssNMzJRpCvqsCrqdHCBlBdw +gffPFDcqVbgqWgjlPlwCCrdBdllnBH +cFFZcbcqfQhgbcNJZRSMRtmNJptS +PZthPBWlPNPSPtmHHggFGgBJJbwg +qqzDvLLrfDpvvDLzqvnLzqpzbrCRGJRHwFCmHRwGwgwbbRCj +nnpnMfpMLTVqfmthmsMNSScMhS +dflvbdvpfffzpnNLNbWqtblqHjmVhVRhHrwrwrswhHnjsmwh +gSGMdMcJBgMTGPSPDVZhHhHZmDZhrwwjVm +CPJQGBGGPcSTFcTCScFtLLdWvptWLbNpNzvWQL +WThqhvvRDJDRhwcrscNDNFgDHNct +fnrZVnfVjrSGGLzZbnLzZLjVHstHHHQtgQbPpPcpHsscsFpN +SVjZSzZdndVCdSSZmTRvMWBRWvvWlrvmhJ +BcllhPPmMMBPcbRwgQtgHHgtmwgzmt +rpLqbrbTnNvqjLqLNqrNLvHzDtwpDCzFwggttFFHCQFQ +LrrrNLqjZSTsZZsvjbLjPhcBBlBsBcGPPcPlPVGP +HHhrggvSHDtCDsfF +ZMpLblppNZBDBwLzLLpMssCntfWdCFCnfCCtRNtq +lbmJlzzLMPMmlBzhSJVccSJhTvSTDh +sdjBBFqHscFnHTzCnRSnzgVTlC +LpWWtvZfrpbLpZpWftprLCCNMzCZMmmzTNNTmSSVSM +pLVtrtbGvpbpGLfPddHBscBQJJGcwsQq +hLcLnVVcfQBLZPVZnThfVVmjqjHNjgvNfdvpNdrrvvfp +lbRlWFHJtGNGpqmrqrCN +DzRRDFsbDtFtDJtWRztzJZVBQMhTsLhQZMZHVLcLcP +WgbdmgMmWDDvcPcpbz +jffpllHSpHRptRRGRntSVwvLSCCJDzcCcDLvCzPP +tRFrnlGfZrQpBpgQQsgF +TpbBZbCCHCGZNHbzGqgFdNlcFSdNlStSqg +wvWnWwLCPjJPJhMWtWdMfFSMgcdM +hhmvmJrJLJJJPvvhDjswCRGHHrHzBBHGVRQBzRRQ +zChCSBbpSsQscDHHQh +LNJJRgGltJDvfcrfgHfZ +lJNRGlLnNJtTGVMlFTbwSWqjBbzWWHSW +NDTJQDVwCTCJhVGDLfbBbBfbGqbfHBfBHb +lMgMrggMrmmtzMcgWdlmMlbsRjSRBsTRBWsSHSBTHRBj +cMPlgztzrPMznnMPpgddgdzpwDDNNwhNFCTwNZQFLTVTwV +ZgshQgzQnnwMtDwBwv +SFWFlFZRRcmlWmWRBCDwvwwftBtLmfLf +PjRFdTdWGddrGlPjcsJZpJzTqhzQJzNHhz +PgHQgddszgdGPWpMjljMcj +bSqTqnZLnDJSmnmZmtllGsnVtnWjGGWtjl +fqSLDbRSfBdHsRwsFdHd +RwHWZpCWhHvwvHCBMBpJMJGPJJnJgc +lztljTFljRRBBzBnBMnJMS +QbRljFtQfljbbFqNFrdZVrZfdCCwVwvddH +sHzztVzLTgnssPggHHsnCtzBmfBMrMccBBmqmrBqBCRqMf +ZhDQJhFDqjmSMrRF +dZpwDhNhhZpQJdDQpwnsGttGwLtRRTLRts +QJNhClVgPTTtPNCJJCtJhlNPZZRVZfvfzZzmvvzvsmZsvmzR +blBWBpdbLBDqBpszzffRsvdzjvvd +BLWpqBbqnDHqBbGlnWGBPcPJcHTTPrhtgNtCtgPc +jWVJqVwgsJcHCVlQVVQNBp +vGhGhTPtSSNCddSBCH +ZCCDtbDftZsqrrcnWW +hJThjThhVzVTZZwnNZRdgmzt +lrbSSddsrbPQpsvNtgPRmtHmvtnR +GQrspWdSGbDcsFFLBhCGVBjhjj +rHdlHdZDlTcflcNfcrCgcTWWpWQFsRWsFjRCsCjWCmhF +BnqbvQPLGLBPwqGmsVshsSWShGms +PzzPPQJPMJtJbbznPnDdrHlNldDNltrgtfDg +SmmMQhPSlmTwPpmnpllMSMPrccFDqFrDFGgqrDcCwfDgwq +bVdLLNvdQWVbJbQLVGfGDGfDgrFrqgqJgg +vjjWsbQdBsszhsHlhhPPSHsM +PqzJqNzsJgsgNqPdLJPPPNVpMMVWGlFWNFGMpWppGF +ZnZBjttQZcQZRTQDjQwGFlWMlGdGWVrWWlGn +ZRDBRSZDSdSLsqJHfSbzzL +rljJqtZlJqlJcvBNJBNQfQ +TVMWznvPMTFWznwPFFvwFbbBNBgbcNpQdNcBFQpb +mDnLWsPLvLMnnnmTzLzVCtlRRtjSljCZhDlhtqSq +fgWMHClGMWfgRWWWGCfmfgCSVQNTDFHTtddVQQDZNLDZtVVL +wSqbsvzpwpbpdFTNLQwLNTFN +zscjPnPqsJlmPJCJSC +GZSwQjGwGrCGwrTjdCTwdTBpqqlmNmVpNrNvplJqNNpl +zMfJnDcbRRDRFbzDFRLFBtqNmqqtNBmNBvNm +sHcJRRHzzfQTjjCjQjCH +wJCVVbJgCLCwGsMbbGTlsRWHsztZPZWtPrPrWrHzrz +DBqdvfqDBqFpWZFrtppZJp +djqNfQcjDQjMgbbwLjlJGn +TSwfZMfpQwcCCCCrbbCZ +PLJmGJnjqjrsCjMMVj +LnNNLLLnFFWmLFMGNMDgfRpDQSfwSfgQzBHwTS +CdjNCMmdCrVmCjJdVjFNMtMzhWwpGbpBhPZZZDbGPpDhpr +QSfHzlvgTQffSSHHclgfHnqPbPPPppBhpWDhwWvPhvbwwh +cQfQRgQnQsnsQSgHRQJsCFMsCjLzJJFjCdNC +ltLlJttmQdfVRhNmhB +gWWDrPSvCSWgMMMZBVBdTQPQZNZVPR +vCbwQzcQrCrLFHwJpHHGpp +VbRVvVHRbJVTzVLBVPtt +cSdgSZSZZFhnFcFwdDQcZZhgzpTlzLDzlWTvBWLztBtpLplT +hZZvdrcSZQZSSwncdHCqHmGHqJrCJqbNbq +lwWmsQlDbCZbVWZq +rRShhhhPjTsjTRvHhqfzqfqvBZZvBCZffC +scPThhRSjQmmNpplcg +FChtDTThDqZtjppjvgNvjl +LBwsVdVHLVvvpVGjjgjS +BbHLBfRcsHcBdMbdWJQPWFCQCZZhWrJPQp +zMtWCstzNrQLpbplFwQwhb +gDTDHGvvHVfVdGZVJGDGdnmbwmWFwfhpbnfjwwjpLl +GJcHVJdvZJVGZWHSSvTZMCzrzzRNSBtBNPBMqNBB +pLzZVVGGZmZVlmDsQglgsllc +WSvrjRjrMMFFnFjnrnrdjBRRgdsblQQPbpggsclNDDbPstDs +SMWRBrrrvSRBSSvWWWBTMTCqpZzLCCTCwJZwwzGZzqHL +TvfGwGZpPnSNgSSnGh +srLVHLcjsjVtHqjjrjFjcCqPBggqNQQnMqhgngnznNNB +VtdmPHLmtVHFLdmZWRJlWpWWWlmWfp +SbSbdTsrVrdhfSdDGJWGmNwWWPwTGP +BqlRpBMmllpmnpvvDJPZWPJwZcJgDD +FFRMCnRFtCMRlMplqMBRBppVbtzdrdhssrmHzVVSsVhVHz +dNrhhLsrshSmmRcPhm +WMCngCzCvzvMMpplQvzWlRBPcVStSmTSQbbVSPQmwm +MpzvWnllglJfqfMgsNdZHqNjdDsPHqqZ +rNvGZRsRcRRBtBCttB +DwPPQWnWWnPQnJlPhmTtBFBmqzhpmnFh +QwQQQlbPPMWwDdDwlVDJJPPdvdSjrjdrsgssLLsZLNBrNNNr +VjMMVzngnjQQfJDchZqGNqFPcg +SWBwTtWSFTHwFClHHmwBPcJJDhNGPJNPPhPPGhJt +CBvSBBBWHdmRTvRWRQFLQRnjnfLLzVbs +flSpvLlmZpCpZmVSBtlvHHjFHTdssZdjHFdTWdNh +RmQMQJRQJQmPgrzJrPcRQRJcWdNTGTGGFhGTdFhHThHGMTsF +RzJrqqcqPRqqJDDqttCpmtlwBpDflSLt +hBjPZbPBbWvTRnLRWntD +MNGQNsQwfzsdGfgTGfzQwwffmnCRDVmJLRLCvnvLDvJCDgRL +wTTdFldNHzTMljjFqphrBqhrZb +wDcMCbZbzPDcZDWQdrJLrQrZBLRBQr +FFSHStjtHgllgFdSNmlfFStBqRRssRsRJrLrjrrJBRVhLJ +fGggtfHtgWMwbCGdCT +RQrQDDbVGrRSfbVbGtmGtwHFWsCCzsJSJJHsJPJvWC +hphQnhZQNjlBBcMMpCsHwFjvvHWHWsFvjC +ppcnnBZqllTQfmrffbtGTDGt +dsDFsBZBhCFhshFrpBFnmLQmHmRgRbLqmmmRQDLm +PPBBNNNtGTwJNfTJffNttfLQgqLgHvHbqRwlgmblRvll +NSNTGTJTWPjGWMPSJJzrBSpzdFSddCFdncrs +bPzRlMPTzTMldJMnhswcjzfQVccQhc +HCCqNmNmQQmQssJn +pHptprtgRStTtMJt +nTmhrsPMsTfmHHGcSgtj +bJJwdlrJQLlvwlQDDwSbgffGVNjfgjNtVbcf +QlpDQFJdvdFqJdFpLvDFpLLnzZMnBMRRzMTqnrzqTRPznz +qRVRqBzgwqRpqRgVqQRPpQJJPrPhPGJnsGrCFdFJrZdG +ZvWDmMvmSvCndssrsJ +WcZcNWlcMjBQpzNTqVBp +DpLPZLDDlcgmDmhVgfgfWWRwhwwt +VrVMdbCrrBTjCMQQtMwQNSqMQW +VCBHdJHdvrrFsbsdrBJTdTzZcpmZGDGPlmzmlccFDZDn + diff --git a/day03/test b/day03/test @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw