diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index bbcbbe7d..7a73a815 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,5 +1,5 @@
---
-name: Feature request
+name: Feature request, suggest
about: Suggest an idea for this project
title: ''
labels: ''
diff --git a/.gitignore b/.gitignore
index c9d07c19..1eebf5b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,4 @@ guru.data.json
database.json
.env
session
-tmp
\ No newline at end of file
+tmp
diff --git a/.gitignore.js b/.gitignore.js
index 4ec245a1..26480755 100644
--- a/.gitignore.js
+++ b/.gitignore.js
@@ -7,7 +7,7 @@ yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
-# Diagnostic reports (https://nodejs.org/api/report.html)
+# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
diff --git a/Assets/20240302_120657.jpg b/Assets/20240302_120657.jpg
deleted file mode 100644
index 69566cc6..00000000
Binary files a/Assets/20240302_120657.jpg and /dev/null differ
diff --git a/Assets/Star.html b/Assets/Star.html
new file mode 100644
index 00000000..980eaf83
--- /dev/null
+++ b/Assets/Star.html
@@ -0,0 +1,75 @@
+
+
+
+
+
+ GURU-BOT Status
+
+
+
+ STAR-MD-V2 Online
+
+
\ No newline at end of file
diff --git a/Assets/XLICON.js b/Assets/XLICON.js
index 41ac3b20..ae94bfe5 100644
--- a/Assets/XLICON.js
+++ b/Assets/XLICON.js
@@ -1,4 +1,4 @@
/**
- * @XLICON_V2
- * https://github.com/salmanytofficial/XLICON-V2-MD
+ * @STAR_V2
+ * https://github.com/Xcelsama/STAR-MD-V2
*/
\ No newline at end of file
diff --git a/Assets/mp3/STAR.mp3 b/Assets/mp3/STAR.mp3
new file mode 100644
index 00000000..26f80410
Binary files /dev/null and b/Assets/mp3/STAR.mp3 differ
diff --git a/Assets/mp3/STAR1.mp3 b/Assets/mp3/STAR1.mp3
new file mode 100644
index 00000000..2421c4a7
Binary files /dev/null and b/Assets/mp3/STAR1.mp3 differ
diff --git a/Assets/mp3/STAR2.mp3 b/Assets/mp3/STAR2.mp3
new file mode 100644
index 00000000..51a3ebc5
Binary files /dev/null and b/Assets/mp3/STAR2.mp3 differ
diff --git a/Assets/mp3/STAR3.mp3 b/Assets/mp3/STAR3.mp3
new file mode 100644
index 00000000..5a0deecd
Binary files /dev/null and b/Assets/mp3/STAR3.mp3 differ
diff --git a/Assets/mp3/STAR4.mp3 b/Assets/mp3/STAR4.mp3
new file mode 100644
index 00000000..e9500a2c
Binary files /dev/null and b/Assets/mp3/STAR4.mp3 differ
diff --git a/Assets/mp3/Xlicon.mp3 b/Assets/mp3/Xlicon.mp3
deleted file mode 100644
index b0c71374..00000000
Binary files a/Assets/mp3/Xlicon.mp3 and /dev/null differ
diff --git a/Assets/mp3/Xlicon1.mp3 b/Assets/mp3/Xlicon1.mp3
deleted file mode 100644
index 75b3aef4..00000000
Binary files a/Assets/mp3/Xlicon1.mp3 and /dev/null differ
diff --git a/Assets/mp3/Xlicon2.mp3 b/Assets/mp3/Xlicon2.mp3
deleted file mode 100644
index 7ea1efd5..00000000
Binary files a/Assets/mp3/Xlicon2.mp3 and /dev/null differ
diff --git a/Assets/mp3/Xlicon3.mp3 b/Assets/mp3/Xlicon3.mp3
deleted file mode 100644
index 2874a113..00000000
Binary files a/Assets/mp3/Xlicon3.mp3 and /dev/null differ
diff --git a/Assets/mp3/Xlicon4.mp3 b/Assets/mp3/Xlicon4.mp3
deleted file mode 100644
index c897b946..00000000
Binary files a/Assets/mp3/Xlicon4.mp3 and /dev/null differ
diff --git a/Assets/mp3/excel b/Assets/mp3/excel
new file mode 100644
index 00000000..8d1c8b69
--- /dev/null
+++ b/Assets/mp3/excel
@@ -0,0 +1 @@
+
diff --git a/CODEOWNERS b/CODEOWNERS
index 7e39cbc7..84c46661 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -1,4 +1,4 @@
-# These owners will be the default owners for everything
+ # These owners will be the default owners for everything
#in the repo.
@Guru322
diff --git a/Dockerfile b/Dockerfile
index 2e404d96..94f49115 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:lts-buster
+ FROM node:lts-buster
RUN apt-get update && \
apt-get install -y \
diff --git a/GURU-Bing.js b/GURU-Bing.js
index d3a0eb7c..87f940b7 100644
--- a/GURU-Bing.js
+++ b/GURU-Bing.js
@@ -1 +1 @@
-const _0x41aff2=_0x2490;(function(_0x17406c,_0x5b26ba){const _0x566e1f=_0x2490,_0x5c0c81=_0x17406c();while(!![]){try{const _0x45f945=parseInt(_0x566e1f(0xeb))/0x1*(parseInt(_0x566e1f(0xe3))/0x2)+-parseInt(_0x566e1f(0xfd))/0x3*(-parseInt(_0x566e1f(0xfb))/0x4)+-parseInt(_0x566e1f(0xec))/0x5*(-parseInt(_0x566e1f(0xf2))/0x6)+parseInt(_0x566e1f(0xed))/0x7*(parseInt(_0x566e1f(0xe5))/0x8)+-parseInt(_0x566e1f(0xf5))/0x9+-parseInt(_0x566e1f(0x106))/0xa*(-parseInt(_0x566e1f(0xfa))/0xb)+-parseInt(_0x566e1f(0xe8))/0xc;if(_0x45f945===_0x5b26ba)break;else _0x5c0c81['push'](_0x5c0c81['shift']());}catch(_0x3de7b1){_0x5c0c81['push'](_0x5c0c81['shift']());}}}(_0x3a5c,0xd2203));import _0xdc1d7f from'node-fetch';let handler=async(_0x15d4c8,{conn:_0x1013c6,args:_0x1a5fed,usedPrefix:_0xd3a9dd,command:_0x4f76ca,text:_0x10cf96})=>{const _0x39c225=_0x2490,_0x4ea5c1={'AgpSH':_0x39c225(0xf9),'LblMr':function(_0x5c93e7,_0x4b550c){return _0x5c93e7(_0x4b550c);},'DrpsB':'No\x20valid\x20JSON\x20response\x20from\x20Bing\x20'};if(!_0x10cf96&&!(_0x15d4c8[_0x39c225(0xf4)]&&_0x15d4c8[_0x39c225(0xf4)][_0x39c225(0xee)]))throw'Please\x20provide\x20some\x20text\x20or\x20quote\x20a\x20message\x20to\x20get\x20a\x20response.';!_0x10cf96&&_0x15d4c8[_0x39c225(0xf4)]&&_0x15d4c8[_0x39c225(0xf4)][_0x39c225(0xee)]&&(_0x10cf96=_0x15d4c8['quoted'][_0x39c225(0xee)]);_0x15d4c8[_0x39c225(0xff)](_0x4ea5c1[_0x39c225(0xea)]),_0x15d4c8['react']('๐ค');const _0x18e5b9=_0x4ea5c1[_0x39c225(0xf6)](encodeURIComponent,_0x10cf96);let _0x902291=await _0x4ea5c1[_0x39c225(0xf6)](Bing,_0x18e5b9);if(!_0x902291)throw new Error(_0x4ea5c1[_0x39c225(0xf1)]);await _0x1013c6[_0x39c225(0xff)](_0x15d4c8[_0x39c225(0x104)],_0x902291,_0x15d4c8);};function _0x2490(_0x3de1ad,_0x46bd4f){const _0x3a5c4d=_0x3a5c();return _0x2490=function(_0x24907b,_0x1537f0){_0x24907b=_0x24907b-0xe1;let _0x167307=_0x3a5c4d[_0x24907b];return _0x167307;},_0x2490(_0x3de1ad,_0x46bd4f);}handler['help']=[_0x41aff2(0xe4)],handler[_0x41aff2(0xe7)]=['AI'],handler[_0x41aff2(0xef)]=/^(bing)$/i;export default handler;function _0x3a5c(){const _0x52cbe0=['rPqWb','964870SXXJHb','POST','wTiLY','298kvIdQp','bing','75808MHvLpa','sseCS','tags','34580076yEaiVp','system','AgpSH','6607aTUqaY','4682035YwUejm','1127rnFKgh','text','command','https://copilot.github1s.tk/v1/chat/completions','DrpsB','6EtTStg','Creative','quoted','12188214KWLteA','LblMr','user','dummy','Waiting\x20Response\x20from\x20Guru\x20Bot\x20server...','77nXEdni','354436JVuREI','content','33YQoTtz','application/json','reply','lVgli','You\x20are\x20an\x20helpful\x20assistant.','stringify','message','chat'];_0x3a5c=function(){return _0x52cbe0;};return _0x3a5c();}async function Bing(_0x494d12){const _0x6a60db=_0x41aff2,_0x16f4ca={'ZBJmj':_0x6a60db(0xf0),'bOYZd':_0x6a60db(0xe1),'wTiLY':_0x6a60db(0xf8),'sseCS':_0x6a60db(0xfe),'rPqWb':_0x6a60db(0xf3),'lVgli':_0x6a60db(0xe9),'uqaRC':_0x6a60db(0x101)};let _0x4a9f6b=await(await _0xdc1d7f(_0x16f4ca['ZBJmj'],{'method':_0x16f4ca['bOYZd'],'headers':{'Authorization':_0x16f4ca[_0x6a60db(0xe2)],'Content-Type':_0x16f4ca[_0x6a60db(0xe6)]},'body':JSON[_0x6a60db(0x102)]({'model':_0x16f4ca[_0x6a60db(0x105)],'max_tokens':0x64,'messages':[{'role':_0x16f4ca[_0x6a60db(0x100)],'content':_0x16f4ca['uqaRC']},{'role':_0x6a60db(0xf7),'content':_0x494d12}]})}))['json']();return _0x4a9f6b['choices'][0x0][_0x6a60db(0x103)][_0x6a60db(0xfc)];}
+const _0x41aff2=_0x2490;(function(_0x17406c,_0x5b26ba){const _0x566e1f=_0x2490,_0x5c0c81=_0x17406c();while(!![]){try{const _0x45f945=parseInt(_0x566e1f(0xeb))/0x1*(parseInt(_0x566e1f(0xe3))/0x2)+-parseInt(_0x566e1f(0xfd))/0x3*(-parseInt(_0x566e1f(0xfb))/0x4)+-parseInt(_0x566e1f(0xec))/0x5*(-parseInt(_0x566e1f(0xf2))/0x6)+parseInt(_0x566e1f(0xed))/0x7*(parseInt(_0x566e1f(0xe5))/0x8)+-parseInt(_0x566e1f(0xf5))/0x9+-parseInt(_0x566e1f(0x106))/0xa*(-parseInt(_0x566e1f(0xfa))/0xb)+-parseInt(_0x566e1f(0xe8))/0xc;if(_0x45f945===_0x5b26ba)break;else _0x5c0c81['push'](_0x5c0c81['shift']());}catch(_0x3de7b1){_0x5c0c81['push'](_0x5c0c81['shift']());}}}(_0x3a5c,0xd2203));import _0xdc1d7f from'node-fetch';let handler=async(_0x15d4c8,{conn:_0x1013c6,args:_0x1a5fed,usedPrefix:_0xd3a9dd,command:_0x4f76ca,text:_0x10cf96})=>{const _0x39c225=_0x2490,_0x4ea5c1={'AgpSH':_0x39c225(0xf9),'LblMr':function(_0x5c93e7,_0x4b550c){return _0x5c93e7(_0x4b550c);},'DrpsB':'No\x20valid\x20JSON\x20response\x20from\x20Bing\x20'};if(!_0x10cf96&&!(_0x15d4c8[_0x39c225(0xf4)]&&_0x15d4c8[_0x39c225(0xf4)][_0x39c225(0xee)]))throw'Please\x20provide\x20some\x20text\x20or\x20quote\x20a\x20message\x20to\x20get\x20a\x20response.';!_0x10cf96&&_0x15d4c8[_0x39c225(0xf4)]&&_0x15d4c8[_0x39c225(0xf4)][_0x39c225(0xee)]&&(_0x10cf96=_0x15d4c8['quoted'][_0x39c225(0xee)]);_0x15d4c8[_0x39c225(0xff)](_0x4ea5c1[_0x39c225(0xea)]),_0x15d4c8['react']('๐ค');const _0x18e5b9=_0x4ea5c1[_0x39c225(0xf6)](encodeURIComponent,_0x10cf96);let _0x902291=await _0x4ea5c1[_0x39c225(0xf6)](Bing,_0x18e5b9);if(!_0x902291)throw new Error(_0x4ea5c1[_0x39c225(0xf1)]);await _0x1013c6[_0x39c225(0xff)](_0x15d4c8[_0x39c225(0x104)],_0x902291,_0x15d4c8);};function _0x2490(_0x3de1ad,_0x46bd4f){const _0x3a5c4d=_0x3a5c();return _0x2490=function(_0x24907b,_0x1537f0){_0x24907b=_0x24907b-0xe1;let _0x167307=_0x3a5c4d[_0x24907b];return _0x167307;},_0x2490(_0x3de1ad,_0x46bd4f);}handler['help']=[_0x41aff2(0xe4)],handler[_0x41aff2(0xe7)]=['AI'],handler[_0x41aff2(0xef)]=/^(bing)$/i;export default handler;function _0x3a5c(){const _0x52cbe0=['rPqWb','964870SXXJHb','POST','wTiLY','298kvIdQp','bing','75808MHvLpa','sseCS','tags','34580076yEaiVp','system','AgpSH','6607aTUqaY','4682035YwUejm','1127rnFKgh','text','command','https://copilot.github1s.tk/v1/chat/completions','DrpsB','6EtTStg','Creative','quoted','12188214KWLteA','LblMr','user','dummy','Waiting\x20Response\x20from\x20Guru\x20Bot\x20server...','77nXEdni','354436JVuREI','content','33YQoTtz','application/json','reply','lVgli','You\x20are\x20an\x20helpful\x20assistant.','stringify','message','chat'];_0x3a5c=function(){return _0x52cbe0;};return _0x3a5c();}async function Bing(_0x494d12){const _0x6a60db=_0x41aff2,_0x16f4ca={'ZBJmj':_0x6a60db(0xf0),'bOYZd':_0x6a60db(0xe1),'wTiLY':_0x6a60db(0xf8),'sseCS':_0x6a60db(0xfe),'rPqWb':_0x6a60db(0xf3),'lVgli':_0x6a60db(0xe9),'uqaRC':_0x6a60db(0x101)};let _0x4a9f6b=await(await _0xdc1d7f(_0x16f4ca['ZBJmj'],{'method':_0x16f4ca['bOYZd'],'headers':{'Authorization':_0x16f4ca[_0x6a60db(0xe2)],'Content-Type':_0x16f4ca[_0x6a60db(0xe6)]},'body':JSON[_0x6a60db(0x102)]({'model':_0x16f4ca[_0x6a60db(0x105)],'max_tokens':0x64,'messages':[{'role':_0x16f4ca[_0x6a60db(0x100)],'content':_0x16f4ca['uqaRC']},{'role':_0x6a60db(0xf7),'content':_0x494d12}]})}))['json']();return _0x4a9f6b['choices'][0x0][_0x6a60db(0x103)][_0x6a60db(0xfc)];}
diff --git a/Guru.js b/Guru.js
index 906c802f..6a60321f 100644
--- a/Guru.js
+++ b/Guru.js
@@ -1 +1,583 @@
-const _0x374239=_0x4b29;(function(_0xe49a30,_0x2d13fe){const _0x57d570=_0x4b29,_0x2d5b05=_0xe49a30();while(!![]){try{const _0x21ae1f=-parseInt(_0x57d570(0x286))/0x1*(-parseInt(_0x57d570(0x1b7))/0x2)+parseInt(_0x57d570(0x1db))/0x3*(parseInt(_0x57d570(0x1e8))/0x4)+-parseInt(_0x57d570(0x1ca))/0x5*(-parseInt(_0x57d570(0x25d))/0x6)+-parseInt(_0x57d570(0x1f5))/0x7+parseInt(_0x57d570(0x239))/0x8*(-parseInt(_0x57d570(0x28a))/0x9)+parseInt(_0x57d570(0x26f))/0xa+parseInt(_0x57d570(0x20b))/0xb*(-parseInt(_0x57d570(0x1ef))/0xc);if(_0x21ae1f===_0x2d13fe)break;else _0x2d5b05['push'](_0x2d5b05['shift']());}catch(_0x1d5f1b){_0x2d5b05['push'](_0x2d5b05['shift']());}}}(_0x2e13,0x8c2b2),process[_0x374239(0x207)][_0x374239(0x1c7)]='0');import'./config.js';import{createRequire}from'module';import _0x2e740d,{join}from'path';import{fileURLToPath,pathToFileURL}from'url';function _0x2e13(){const _0x3881bd=['replace','./plugins/index','message','pollUpdate','removeAllListeners','freeze','__filename','level','6bzppUh','redBright','connectionUpdate','requestPairingCode','from','payload','test','localeCompare','sSubject','?update=','Hai๐คฉ','handler','greenBright','Start\x20with\x20your\x20country\x27s\x20WhatsApp\x20code,\x20Example\x2062xxx','plugins','reset','Environment\x20variable\x20not\x20found.','stdin','10150140sRApnZ','\x20\x20\x20','output','๐จ\x20','spromote','An\x20error\x20occurred\x20during\x20temporary\x20file\x20cleanup:','exit','argv','sms','isInit','server','E.164','isChats','loggedOut','cyan','socket','\x0aconnection\x20closed....\x20Trying\x20to\x20Restart','log','filter','sRestrictOff','support','__dirname','opts','3731gfbgay','toLowerCase','APIKeys','ffprobe','18531Nnwgef','https://guruapi.tech/api','endsWith','win32','welcome','loadDatabase','database.json','creds.update','registered','\x20The\x20group\x20icon\x20has\x20been\x20updated!','bye','pre-key-','*@user*\x20has\x20been\x20promoted\x20to\x20an\x20admin!','chain','phoneNumberMobileCountryCode','PORT','sendMessage','PREFIX','API','createInterface','message.delete','subject','APIs','./session','package.json','\x0a๐ฉ\x20R\x20E\x20A\x20D\x20Y','connection.update','messages.upsert','statusCode','\x20The\x20group\x20is\x20now\x20*OPEN*!\x0aAll\x20participants\x20can\x20send\x20messages.','close','Error:','question',',\x22time\x22:\x22','match','๐ผ๏ธ','*@user*\x20is\x20no\x20longer\x20an\x20admin.','./session/','582Cdxoxd','read','--pairing-code','exitProcess','now','demote','--mobile','bold','promote','--qr','creds','forEach','-\x20Code','tmp','off','join','NODE_TLS_REJECT_UNAUTHORIZED','toJSON','-filter_complex','4432605OcKprw','@g.us','webp','error','name','announceOff','send','some','color','loadMessage','fatal','\x0aStored\x20Sessions\x20Cleared\x20โ
','icon','\x0aNew\x20plugin\x20-\x20\x27','trim','sAnnounceOff','trace','6306uEwKbK','length','author','restrictOn','nationalNumber','\x0aFailed\x20to\x20register\x20your\x20phone\x20number.\x20Please\x20try\x20again.\x0a','write','prefix','toString','Cannot\x20use\x20pairing\x20code\x20with\x20mobile\x20api','restrictOff','-type','data','1468ozJlZY','ffmpeg','sort','revoke','./server.js','--version','reload','132WyuXmz','\x20The\x20group\x20is\x20now\x20*CLOSED*!\x0aOnly\x20admins\x20can\x20send\x20messages.','conn','autocleartmp','session','stdout','936999jKgotA','Please\x20type\x20your\x20WhatsApp\x20number\x20:\x20','Temporary\x20file\x20cleanup\x20completed.','readFromFile','tmpdir','open','\x0aError\x20require\x20plugin\x20\x27','authState','yellow','url','parse','logger','๐ค๐','\x0aLogging\x20in....','group-participants.update','\x20Hello\x20@user!\x0a\x0a๐\x20*WELCOME*\x20to\x20the\x20group\x20@group!\x0a\x0a๐\x20Please\x20read\x20the\x20*DESCRIPTION*\x20@desc.','initializing\x20Guru\x20Bot','SESSION_ID','env','\x0aUpdated\x20plugin\x20-\x20\x27','phoneNumber','countryCallingCode','1967669bZgljs','-\x20Number','authFolder','func','catch','\x20Congrats\x20you\x20have\x20successfully\x20deployed\x20XLICON-BOT\x0aJoin\x20my\x20support\x20Group\x20for\x20any\x20Query\x0a\x20https://chat.whatsapp.com/Kchd5WS2UmILfGEP523DqL','dirname','Q2hlYXAgQ29weSBPZiBHdXJ1IEJvdCBGb3VuZCAsIFBsZWFzZSBVc2UgdGhlIE9yaWdpbmFsIEd1cnUgQm90IEZyb20gaHR0cHM6Ly9naXRodWIuY29tL0d1cnUzMjIvR1VSVS1CT1QK','presenceUpdate','all','\x0aInvalid\x20phone\x20number:\x20','Start\x20with\x20your\x20country\x27s\x20WhatsApp\x20code,\x20Example\x20:\x2062xxx','desc','default','requestRegistrationCode','phoneNumberNationalNumber','-loglevel','./handler.js','child','__require','info','keys','-hide_banner','bgBlack','onDelete','READ','๐\x20GOODBYE\x20@user\x20','chats','participantsUpdate','uncaughtException','map','-amin','\x0aDeleted\x20plugin\x20-\x20\x27','reloadHandler','pairingNumber','fromEntries','phoneNumberCountryCode','bind','convert','race','-frames:v','DATABASE_URL','timestamp','๐ค๐
โโ๏ธ','warn','SERVER_PORT','4208ErJGfs','messages.update','Please\x20Enter\x20Your\x20OTP\x20Code','presence.update','groupsUpdate','startsWith','Successfully\x20registered\x20your\x20phone\x20number.','sDesc','groups.update','then','slice','sRevoke','magick','entries','voice','Please\x20type\x20your\x20WhatsApp\x20number','\x20The\x20group\x20description\x20has\x20been\x20updated\x20to:\x0a@desc','\x20The\x20group\x20title\x20has\x20been\x20changed\x20to:\x0a@group','\x20Edit\x20Group\x20Info\x20has\x20been\x20restricted\x20to\x20admins\x20only!','Z3VydQ==','sRestrictOn','find','credsUpdate','spawn','base64','register','includes','@whiskeysockets/baileys'];_0x2e13=function(){return _0x3881bd;};return _0x2e13();}import _0x456d95 from'./lib/tempclear.js';import _0xbef445 from'axios';import{platform}from'process';import _0x58cc04 from'dotenv';global['__filename']=function filename(_0x5f3d8e=import.meta[_0x374239(0x1fe)],_0xf164d=platform!==_0x374239(0x28d)){const _0xb9e94b=_0x374239;return _0xf164d?/file:\/\/\//[_0xb9e94b(0x263)](_0x5f3d8e)?fileURLToPath(_0x5f3d8e):_0x5f3d8e:pathToFileURL(_0x5f3d8e)[_0xb9e94b(0x1e3)]();},global[_0x374239(0x284)]=function dirname(_0x433294){const _0x518d71=_0x374239;return _0x2e740d[_0x518d71(0x211)](global[_0x518d71(0x25b)](_0x433294,!![]));},global[_0x374239(0x21e)]=function require(_0x470632=import.meta[_0x374239(0x1fe)]){return createRequire(_0x470632);},global['gurubot']=_0x374239(0x28b);import*as _0x4e9817 from'ws';import _0x4c7a7b from'cfonts';import{readdirSync,statSync,unlinkSync,existsSync,mkdirSync,readFileSync,rmSync,watch}from'fs';import _0x4a9f72 from'./lib/makesession.js';import _0x5f3915 from'yargs';import{promisify}from'util';import{spawn}from'child_process';import _0x421e30 from'pino';import _0x119f07 from'lodash';import _0x499532 from'chalk';import _0x37cb86 from'syntax-error';import{tmpdir}from'os';import{format}from'util';import{Boom}from'@hapi/boom';import _0x51a471 from'pino';import{makeWASocket,protoType,serialize}from'./lib/simple.js';import{Low,JSONFile}from'lowdb';import{MongoDB}from'./lib/mongoDB.js';import _0x543439 from'./lib/cloudDBAdapter.js';import _0x4ab311 from'node-cache';const {DisconnectReason,useMultiFileAuthState,MessageRetryMap,fetchLatestBaileysVersion,makeCacheableSignalKeyStore,makeInMemoryStore,proto,delay,jidNormalizedUser,PHONENUMBER_MCC,Browsers}=await(await import(_0x374239(0x254)))[_0x374239(0x218)];import _0x162cd5 from'readline';import{parsePhoneNumber}from'libphonenumber-js';import _0x18bfc6 from'./lib/helper.js';import _0x563097 from'emoji-regex';_0x58cc04['config']();async function main(){const _0x25f163=_0x374239,_0x3208a7=process[_0x25f163(0x207)][_0x25f163(0x206)];if(!_0x3208a7){console['error'](_0x25f163(0x26d));return;}try{await _0x4a9f72(_0x3208a7),console['log']('processTxtAndSaveCredentials\x20completed.');}catch(_0x3cff24){console['error'](_0x25f163(0x1b0),_0x3cff24);}}main(),await delay(0x3e8*0xa);async function gandu(){const _0x14b17a=_0x374239;try{const _0x2037c5=readFileSync(_0x14b17a(0x1a9),'utf8'),_0x4c3a1e=JSON[_0x14b17a(0x1ff)](_0x2037c5),_0x4a7429=_0x4c3a1e[_0x14b17a(0x1dd)]&&_0x4c3a1e[_0x14b17a(0x1dd)][_0x14b17a(0x1ce)];!_0x4a7429&&(console[_0x14b17a(0x280)]('LOl'),process[_0x14b17a(0x275)](0x1));const _0x5c54b6=Buffer[_0x14b17a(0x261)](_0x14b17a(0x24c),_0x14b17a(0x251))[_0x14b17a(0x1e3)](),_0x55ff3b=Buffer[_0x14b17a(0x261)](_0x14b17a(0x212),'base64')['toString'](),_0x40fa41=Buffer[_0x14b17a(0x261)]('U2VjdXJpdHkgY2hlY2sgcGFzc2VkLCBUaGFua3MgRm9yIHVzaW5nIEd1cnUgTXVsdGlEZXZpY2U=',_0x14b17a(0x251))[_0x14b17a(0x1e3)]();_0x4a7429&&_0x4a7429[_0x14b17a(0x1d8)]()[_0x14b17a(0x287)]()!==_0x5c54b6[_0x14b17a(0x287)]()?(console['log'](_0x55ff3b),process['exit'](0x1)):(console['log'](''+_0x40fa41),console[_0x14b17a(0x280)](_0x499532['bgBlack'](_0x499532[_0x14b17a(0x25e)](_0x14b17a(0x205)))));}catch(_0xeac76a){console[_0x14b17a(0x1cd)](_0x14b17a(0x1b0),_0xeac76a);}}gandu();const pairingCode=!!global[_0x374239(0x22d)]||process['argv'][_0x374239(0x253)](_0x374239(0x1b9)),useMobile=process[_0x374239(0x276)][_0x374239(0x253)](_0x374239(0x1bd)),useQr=process[_0x374239(0x276)]['includes'](_0x374239(0x1c0)),useStore=![],MAIN_LOGGER=_0x421e30({'timestamp':()=>_0x374239(0x1b2)+new Date()[_0x374239(0x1c8)]()+'\x22'}),logger=MAIN_LOGGER['child']({});logger[_0x374239(0x25c)]=_0x374239(0x1da);const store=useStore?makeInMemoryStore({'logger':logger}):undefined;store?.[_0x374239(0x1f8)]('./session'),setInterval(()=>{const _0x3904c2=_0x374239;store?.['writeToFile'](_0x3904c2(0x1a8));},0x2710*0x6);const msgRetryCounterCache=new _0x4ab311(),rl=_0x162cd5[_0x374239(0x1a4)]({'input':process[_0x374239(0x26e)],'output':process[_0x374239(0x1f4)]}),question=_0x37bcb9=>new Promise(_0x1394ec=>rl[_0x374239(0x1b1)](_0x37bcb9,_0x1394ec)),{CONNECTING}=_0x4e9817,{chain}=_0x119f07,PORT=process[_0x374239(0x207)][_0x374239(0x1a0)]||process['env'][_0x374239(0x238)]||0xbb8;protoType(),serialize(),global[_0x374239(0x1a3)]=(_0x2d7fa4,_0x4a9957='/',_0x3e5033={},_0x44a96c)=>(_0x2d7fa4 in global[_0x374239(0x1a7)]?global[_0x374239(0x1a7)][_0x2d7fa4]:_0x2d7fa4)+_0x4a9957+(_0x3e5033||_0x44a96c?'?'+new URLSearchParams(Object[_0x374239(0x246)]({..._0x3e5033,..._0x44a96c?{[_0x44a96c]:global[_0x374239(0x288)][_0x2d7fa4 in global[_0x374239(0x1a7)]?global['APIs'][_0x2d7fa4]:_0x2d7fa4]}:{}})):''),global[_0x374239(0x235)]={'start':new Date()};const __dirname=global[_0x374239(0x284)](import.meta[_0x374239(0x1fe)]);global[_0x374239(0x285)]=new Object(_0x5f3915(process[_0x374239(0x276)][_0x374239(0x243)](0x2))[_0x374239(0x1ba)](![])[_0x374239(0x1ff)]()),global[_0x374239(0x1e2)]=new RegExp('^['+(process[_0x374239(0x207)][_0x374239(0x1a2)]||'*/i!#$%+ยฃยขโฌยฅ^ยฐ=ยถโรรทฯโโยฉยฎ:;?&.\x5c-.@')[_0x374239(0x255)](/[|\\{}()[\]^$+*?.\-\^]/g,'\x5c$&')+']'),global[_0x374239(0x285)]['db']=process[_0x374239(0x207)][_0x374239(0x234)],global['db']=new Low(/https?:\/\//['test'](opts['db']||'')?new _0x543439(opts['db']):/mongodb(\+srv)?:\/\//i[_0x374239(0x263)](opts['db'])?new MongoDB(opts['db']):new JSONFile((opts['_'][0x0]?opts['_'][0x0]+'_':'')+_0x374239(0x290))),global['DATABASE']=global['db'],global[_0x374239(0x28f)]=async function loadDatabase(){const _0x4e4056=_0x374239;if(global['db'][_0x4e4056(0x224)])return new Promise(_0x201513=>setInterval(async function(){const _0x2ff9bf=_0x4e4056;!global['db'][_0x2ff9bf(0x224)]&&(clearInterval(this),_0x201513(global['db']['data']==null?global['loadDatabase']():global['db'][_0x2ff9bf(0x1e7)]));},0x1*0x3e8));if(global['db'][_0x4e4056(0x1e7)]!==null)return;global['db'][_0x4e4056(0x224)]=!![],await global['db'][_0x4e4056(0x1b8)]()[_0x4e4056(0x20f)](console['error']),global['db']['READ']=null,global['db'][_0x4e4056(0x1e7)]={'users':{},'chats':{},'stats':{},'msgs':{},'sticker':{},'settings':{},...global['db']['data']||{}},global['db'][_0x4e4056(0x297)]=chain(global['db'][_0x4e4056(0x1e7)]);},loadDatabase(),global[_0x374239(0x20d)]=_0x374239(0x1f3);const {state,saveCreds}=await useMultiFileAuthState(global[_0x374239(0x20d)]);let {version,isLatest}=await fetchLatestBaileysVersion();const connectionOptions={'version':version,'logger':_0x51a471({'level':_0x374239(0x1d4)}),'printQRInTerminal':!pairingCode,'mobile':useMobile,'browser':['chrome\x20(linux)','',''],'auth':{'creds':state[_0x374239(0x1c1)],'keys':makeCacheableSignalKeyStore(state['keys'],_0x51a471()[_0x374239(0x21d)]({'level':_0x374239(0x1d4),'stream':'store'}))},'markOnlineOnConnect':!![],'generateHighQualityLinkPreview':!![],'getMessage':async _0x345f52=>{const _0x45cf0b=_0x374239;let _0x52036e=jidNormalizedUser(_0x345f52['remoteJid']),_0x26a900=await store[_0x45cf0b(0x1d3)](_0x52036e,_0x345f52['id']);return _0x26a900?.['message']||'';},'msgRetryCounterCache':msgRetryCounterCache,'defaultQueryTimeoutMs':undefined};global[_0x374239(0x1f1)]=makeWASocket(connectionOptions),conn[_0x374239(0x278)]=![],store?.[_0x374239(0x230)](conn['ev']);if(pairingCode&&!conn['authState']['creds']['registered']){if(useMobile)throw new Error(_0x374239(0x1e4));let phoneNumber;!!global['pairingNumber']?(phoneNumber=global[_0x374239(0x22d)][_0x374239(0x255)](/[^0-9]/g,''),!Object[_0x374239(0x220)](PHONENUMBER_MCC)[_0x374239(0x1d1)](_0x4e6b31=>phoneNumber[_0x374239(0x23e)](_0x4e6b31))&&(console[_0x374239(0x280)](_0x499532[_0x374239(0x222)](_0x499532[_0x374239(0x25e)](_0x374239(0x216)))),process[_0x374239(0x275)](0x0))):(phoneNumber=await question(_0x499532[_0x374239(0x222)](_0x499532['greenBright']('Please\x20type\x20your\x20WhatsApp\x20number\x20:\x20'))),phoneNumber=phoneNumber[_0x374239(0x255)](/[^0-9]/g,''),!Object[_0x374239(0x220)](PHONENUMBER_MCC)['some'](_0x183b4d=>phoneNumber[_0x374239(0x23e)](_0x183b4d))&&(console['log'](_0x499532[_0x374239(0x222)](_0x499532['redBright']('Start\x20with\x20your\x20country\x27s\x20WhatsApp\x20code,\x20Example\x20:\x2062xxx'))),phoneNumber=await question(_0x499532[_0x374239(0x222)](_0x499532[_0x374239(0x269)](_0x374239(0x1f6)))),phoneNumber=phoneNumber[_0x374239(0x255)](/[^0-9]/g,''),rl[_0x374239(0x1af)]())),setTimeout(async()=>{const _0x3b68d7=_0x374239;let _0x6cba03=await conn[_0x3b68d7(0x260)](phoneNumber);_0x6cba03=_0x6cba03?.[_0x3b68d7(0x1b3)](/.{1,4}/g)?.[_0x3b68d7(0x1c6)]('-')||_0x6cba03;const _0x1919d2=_0x499532[_0x3b68d7(0x1be)][_0x3b68d7(0x269)]('Your\x20Pairing\x20Code:')+'\x20'+_0x499532['bgGreenBright'](_0x499532['black'](_0x6cba03));console[_0x3b68d7(0x280)](_0x1919d2);},0xbb8);}if(useMobile&&!conn[_0x374239(0x1fc)][_0x374239(0x1c1)][_0x374239(0x292)]){const {registration}=conn[_0x374239(0x1fc)][_0x374239(0x1c1)]||{'registration':{}};if(!registration[_0x374239(0x209)]){console[_0x374239(0x280)](_0x374239(0x272)+_0x499532[_0x374239(0x25e)](_0x374239(0x248))+':');let phoneNumber=await question(_0x374239(0x270)+_0x499532['cyan'](_0x374239(0x20c))+':\x20');phoneNumber=phoneNumber[_0x374239(0x255)](/[^0-9]/g,''),!Object[_0x374239(0x220)](PHONENUMBER_MCC)[_0x374239(0x1d1)](_0x16a2ce=>phoneNumber[_0x374239(0x23e)](_0x16a2ce))&&(console['log']('๐ฌ\x20'+_0x499532[_0x374239(0x25e)](_0x374239(0x26a))+':'),console[_0x374239(0x280)](_0x374239(0x272)+_0x499532[_0x374239(0x25e)](_0x374239(0x248))+':'),phoneNumber=await question(_0x374239(0x270)+_0x499532['cyan']('-\x20Number')+':\x20'),phoneNumber=phoneNumber[_0x374239(0x255)](/[^0-9]/g,'')),registration[_0x374239(0x209)]='+'+phoneNumber;}const phoneNumber=parsePhoneNumber(registration[_0x374239(0x209)]);if(!phoneNumber['isValid']())conn['logger']['error'](_0x374239(0x215)+registration['phoneNumber']);registration[_0x374239(0x209)]=phoneNumber['format'](_0x374239(0x27a)),registration[_0x374239(0x22f)]=phoneNumber[_0x374239(0x20a)],registration[_0x374239(0x21a)]=phoneNumber[_0x374239(0x1df)];const mcc=PHONENUMBER_MCC[phoneNumber[_0x374239(0x20a)]];registration[_0x374239(0x298)]=mcc;async function enterCode(){const _0x355bdd=_0x374239;try{console['log'](_0x355bdd(0x272)+_0x499532['redBright'](_0x355bdd(0x23b))+':');const _0x536387=await question(_0x355bdd(0x270)+_0x499532[_0x355bdd(0x27d)](_0x355bdd(0x1c3))+':\x20'),_0x43e2db=await conn[_0x355bdd(0x252)](_0x536387[_0x355bdd(0x255)](/[^0-9]/g,'')[_0x355bdd(0x1d8)]()[_0x355bdd(0x287)]());console[_0x355bdd(0x280)]('๐ฌ\x20'+_0x499532[_0x355bdd(0x25e)](_0x355bdd(0x23f))),console[_0x355bdd(0x280)](_0x43e2db),rl[_0x355bdd(0x1af)]();}catch(_0x14bbcc){conn[_0x355bdd(0x200)][_0x355bdd(0x1cd)](_0x355bdd(0x1e0),_0x14bbcc),await askOTP();}}async function askOTP(){const _0x5eeea5=_0x374239;console[_0x5eeea5(0x280)](_0x5eeea5(0x272)+_0x499532[_0x5eeea5(0x25e)]('What\x20method\x20do\x20you\x20want\x20to\x20use?\x20\x22sms\x22\x20or\x20\x22voice\x22'));let _0x52435c=await question(_0x5eeea5(0x270)+_0x499532['cyan']('-\x20Method')+':\x20');_0x52435c=_0x52435c[_0x5eeea5(0x255)](/["']/g,'')[_0x5eeea5(0x1d8)]()[_0x5eeea5(0x287)]();if(_0x52435c!==_0x5eeea5(0x277)&&_0x52435c!==_0x5eeea5(0x247))return await askOTP();registration['method']=_0x52435c;try{await conn[_0x5eeea5(0x219)](registration),await enterCode();}catch(_0x15a9f6){conn['logger']['error']('\x0aFailed\x20to\x20request\x20registration\x20code.\x20Please\x20try\x20again.\x0a',_0x15a9f6),await askOTP();}}await askOTP();}conn[_0x374239(0x200)]['info']('\x0aWaiting\x20For\x20Login\x0a');!opts[_0x374239(0x263)]&&(global['db']&&setInterval(async()=>{const _0x37f566=_0x374239;if(global['db'][_0x37f566(0x1e7)])await global['db'][_0x37f566(0x1e1)]();if(opts[_0x37f566(0x1f2)]&&(global[_0x37f566(0x283)]||{})[_0x37f566(0x24e)])tmp=[os[_0x37f566(0x1f9)](),_0x37f566(0x1c4)],tmp['forEach'](_0x5c818e=>cp[_0x37f566(0x250)](_0x37f566(0x24e),[_0x5c818e,_0x37f566(0x22a),'3',_0x37f566(0x1e6),'f','-delete']));},0x1e*0x3e8));function _0x4b29(_0x2c228b,_0x13f3e5){const _0x2e13d0=_0x2e13();return _0x4b29=function(_0x4b2926,_0x1f6297){_0x4b2926=_0x4b2926-0x1a0;let _0x493a16=_0x2e13d0[_0x4b2926];return _0x493a16;},_0x4b29(_0x2c228b,_0x13f3e5);}if(opts[_0x374239(0x279)])(await import(_0x374239(0x1ec)))[_0x374239(0x218)](global[_0x374239(0x1f1)],PORT);function runCleanup(){const _0x15c250=_0x374239;_0x456d95()[_0x15c250(0x242)](()=>{const _0x32ba2e=_0x15c250;console['log'](_0x32ba2e(0x1f7));})[_0x15c250(0x20f)](_0x272185=>{const _0x15cfa9=_0x15c250;console[_0x15cfa9(0x1cd)](_0x15cfa9(0x274),_0x272185);})['finally'](()=>{setTimeout(runCleanup,0x3e8*0x3c*0x2);});}runCleanup();function purgeSession(){const _0xe077c2=_0x374239;let _0x39cbec=[];const _0x11bfa7=readdirSync('./session'),_0x4e0f07=_0x11bfa7['filter'](_0x51eb8c=>{const _0x342517=_0x4b29;return _0x51eb8c[_0x342517(0x23e)](_0x342517(0x295));});_0x39cbec=[..._0x39cbec,..._0x4e0f07],_0x4e0f07[_0xe077c2(0x1c2)](_0x346e4f=>{const _0x345df0=_0xe077c2;unlinkSync(_0x345df0(0x1b6)+_0x346e4f);});}async function connectionUpdate(_0x9ef145){const _0x17ce34=_0x374239,{connection:_0x583ae1,lastDisconnect:_0x5fac73,isNewLogin:_0x1576cd,qr:_0x96ffca}=_0x9ef145;global['stopped']=_0x583ae1;if(_0x1576cd)conn['isInit']=!![];const _0xc4479d=_0x5fac73?.[_0x17ce34(0x1cd)]?.[_0x17ce34(0x271)]?.[_0x17ce34(0x1ad)]||_0x5fac73?.[_0x17ce34(0x1cd)]?.['output']?.[_0x17ce34(0x262)]?.[_0x17ce34(0x1ad)];_0xc4479d&&_0xc4479d!==DisconnectReason[_0x17ce34(0x27c)]&&conn?.['ws'][_0x17ce34(0x27e)]==null&&conn[_0x17ce34(0x200)][_0x17ce34(0x21f)](await global[_0x17ce34(0x22c)](!![])[_0x17ce34(0x20f)](console[_0x17ce34(0x1cd)]));if(global['db'][_0x17ce34(0x1e7)]==null)loadDatabase();!pairingCode&&!useMobile&&useQr&&_0x96ffca!=0x0&&_0x96ffca!=undefined&&conn[_0x17ce34(0x200)]['info'](_0x499532[_0x17ce34(0x1fd)](_0x17ce34(0x202)));if(_0x583ae1===_0x17ce34(0x1fa)){const {jid:_0x457f22,name:_0x4676ba}=conn['user'];let _0x33ed46=_0x17ce34(0x267)+_0x4676ba+_0x17ce34(0x210),_0x27425b=conn[_0x17ce34(0x1a1)](_0x457f22,{'text':_0x33ed46,'mentions':[_0x457f22]},{'quoted':null});conn[_0x17ce34(0x200)][_0x17ce34(0x21f)](_0x499532[_0x17ce34(0x1fd)](_0x17ce34(0x1aa)));}_0x583ae1=='close'&&(conn[_0x17ce34(0x200)][_0x17ce34(0x1cd)](_0x499532[_0x17ce34(0x1fd)](_0x17ce34(0x27f))),process[_0x17ce34(0x1d0)](_0x17ce34(0x26c)));}process['on'](_0x374239(0x228),console['error']);let isInit=!![],handler=await import(_0x374239(0x21c));global[_0x374239(0x22c)]=async function(_0x5df9cc){const _0x1571c8=_0x374239;try{const _0x3ab6f4=await import('./handler.js?update='+Date[_0x1571c8(0x1bb)]())[_0x1571c8(0x20f)](console['error']);if(Object[_0x1571c8(0x220)](_0x3ab6f4||{})[_0x1571c8(0x1dc)])handler=_0x3ab6f4;}catch(_0x1bee56){console[_0x1571c8(0x1cd)];}if(_0x5df9cc){const _0x18a8c1=global[_0x1571c8(0x1f1)]['chats'];try{global['conn']['ws'][_0x1571c8(0x1af)]();}catch{}conn['ev'][_0x1571c8(0x259)](),global['conn']=makeWASocket(connectionOptions,{'chats':_0x18a8c1}),isInit=!![];}!isInit&&(conn['ev'][_0x1571c8(0x1c5)](_0x1571c8(0x1ac),conn[_0x1571c8(0x268)]),conn['ev'][_0x1571c8(0x1c5)](_0x1571c8(0x23a),conn['pollUpdate']),conn['ev']['off'](_0x1571c8(0x203),conn[_0x1571c8(0x227)]),conn['ev']['off'](_0x1571c8(0x241),conn[_0x1571c8(0x23d)]),conn['ev'][_0x1571c8(0x1c5)](_0x1571c8(0x1a5),conn['onDelete']),conn['ev']['off'](_0x1571c8(0x23c),conn[_0x1571c8(0x213)]),conn['ev'][_0x1571c8(0x1c5)](_0x1571c8(0x1ab),conn[_0x1571c8(0x25f)]),conn['ev'][_0x1571c8(0x1c5)]('creds.update',conn['credsUpdate']));const _0x4c9163={'welcome':'๐','bye':'๐','promote':_0x1571c8(0x201),'demote':_0x1571c8(0x236),'desc':'๐','subject':'๐','icon':_0x1571c8(0x1b4),'revoke':'๐','announceOn':'๐','announceOff':'๐','restrictOn':'๐ซ','restrictOff':'โ
'};conn[_0x1571c8(0x28e)]=_0x4c9163[_0x1571c8(0x28e)]+_0x1571c8(0x204),conn[_0x1571c8(0x294)]=_0x1571c8(0x225)+_0x4c9163[_0x1571c8(0x294)]+'\x0a\x0aSee\x20you\x20later!',conn[_0x1571c8(0x273)]=_0x4c9163[_0x1571c8(0x1bf)]+_0x1571c8(0x296),conn['sdemote']=_0x4c9163[_0x1571c8(0x1bc)]+_0x1571c8(0x1b5),conn[_0x1571c8(0x240)]=_0x4c9163[_0x1571c8(0x217)]+_0x1571c8(0x249),conn[_0x1571c8(0x265)]=_0x4c9163[_0x1571c8(0x1a6)]+_0x1571c8(0x24a),conn['sIcon']=_0x4c9163[_0x1571c8(0x1d6)]+_0x1571c8(0x293),conn[_0x1571c8(0x244)]=_0x4c9163[_0x1571c8(0x1eb)]+'\x20The\x20group\x20link\x20has\x20been\x20changed\x20to:\x0a@revoke',conn['sAnnounceOn']=_0x4c9163['announceOn']+_0x1571c8(0x1f0),conn[_0x1571c8(0x1d9)]=_0x4c9163[_0x1571c8(0x1cf)]+_0x1571c8(0x1ae),conn[_0x1571c8(0x24d)]=_0x4c9163[_0x1571c8(0x1de)]+_0x1571c8(0x24b),conn[_0x1571c8(0x282)]=_0x4c9163[_0x1571c8(0x1e5)]+'\x20Edit\x20Group\x20Info\x20is\x20now\x20available\x20to\x20all\x20participants!',conn['handler']=handler['handler'][_0x1571c8(0x230)](global[_0x1571c8(0x1f1)]),conn[_0x1571c8(0x258)]=handler[_0x1571c8(0x258)]['bind'](global[_0x1571c8(0x1f1)]),conn[_0x1571c8(0x227)]=handler['participantsUpdate'][_0x1571c8(0x230)](global['conn']),conn[_0x1571c8(0x23d)]=handler[_0x1571c8(0x23d)][_0x1571c8(0x230)](global[_0x1571c8(0x1f1)]),conn['onDelete']=handler['deleteUpdate']['bind'](global[_0x1571c8(0x1f1)]),conn[_0x1571c8(0x213)]=handler[_0x1571c8(0x213)][_0x1571c8(0x230)](global[_0x1571c8(0x1f1)]),conn['connectionUpdate']=connectionUpdate[_0x1571c8(0x230)](global[_0x1571c8(0x1f1)]),conn[_0x1571c8(0x24f)]=saveCreds[_0x1571c8(0x230)](global[_0x1571c8(0x1f1)],!![]);const _0x2d83cd=new Date(),_0x3f5b32=new Date(conn['ev']);if(_0x2d83cd>=_0x3f5b32){const _0x284c9d=Object[_0x1571c8(0x246)](conn[_0x1571c8(0x226)])[_0x1571c8(0x281)](([_0xedac31,_0x42f3da])=>!_0xedac31[_0x1571c8(0x28c)](_0x1571c8(0x1cb))&&_0x42f3da[_0x1571c8(0x27b)])[_0x1571c8(0x229)](_0xc723b0=>_0xc723b0[0x0]);}else{const _0x1c79fd=Object['entries'](conn[_0x1571c8(0x226)])['filter'](([_0x169a6c,_0x9817b2])=>!_0x169a6c[_0x1571c8(0x28c)](_0x1571c8(0x1cb))&&_0x9817b2['isChats'])[_0x1571c8(0x229)](_0x47e704=>_0x47e704[0x0]);}return conn['ev']['on'](_0x1571c8(0x1ac),conn[_0x1571c8(0x268)]),conn['ev']['on'](_0x1571c8(0x23a),conn['pollUpdate']),conn['ev']['on'](_0x1571c8(0x203),conn['participantsUpdate']),conn['ev']['on'](_0x1571c8(0x241),conn[_0x1571c8(0x23d)]),conn['ev']['on'](_0x1571c8(0x1a5),conn[_0x1571c8(0x223)]),conn['ev']['on']('presence.update',conn[_0x1571c8(0x213)]),conn['ev']['on'](_0x1571c8(0x1ab),conn[_0x1571c8(0x25f)]),conn['ev']['on'](_0x1571c8(0x291),conn[_0x1571c8(0x24f)]),isInit=![],!![];};const pluginFolder=global[_0x374239(0x284)](join(__dirname,_0x374239(0x256))),pluginFilter=_0x3b4709=>/\.js$/['test'](_0x3b4709);global[_0x374239(0x26b)]={};async function filesInit(){const _0x4f73bb=_0x374239;for(const _0x5b6881 of readdirSync(pluginFolder)[_0x4f73bb(0x281)](pluginFilter)){try{const _0x1ff60d=global[_0x4f73bb(0x25b)](join(pluginFolder,_0x5b6881)),_0x2483fe=await import(_0x1ff60d);global[_0x4f73bb(0x26b)][_0x5b6881]=_0x2483fe['default']||_0x2483fe;}catch(_0x5190da){conn[_0x4f73bb(0x200)][_0x4f73bb(0x1cd)](_0x5190da),delete global['plugins'][_0x5b6881];}}}filesInit()['then'](_0x2ff588=>Object[_0x374239(0x220)](global[_0x374239(0x26b)]))[_0x374239(0x20f)](console[_0x374239(0x1cd)]),global[_0x374239(0x1ee)]=async(_0x2fde86,_0x588cee)=>{const _0x4ef5b3=_0x374239;if(pluginFilter(_0x588cee)){const _0x834481=global[_0x4ef5b3(0x25b)](join(pluginFolder,_0x588cee),!![]);if(_0x588cee in global[_0x4ef5b3(0x26b)]){if(existsSync(_0x834481))conn[_0x4ef5b3(0x200)]['info'](_0x4ef5b3(0x208)+_0x588cee+'\x27');else return conn[_0x4ef5b3(0x200)][_0x4ef5b3(0x237)](_0x4ef5b3(0x22b)+_0x588cee+'\x27'),delete global[_0x4ef5b3(0x26b)][_0x588cee];}else conn[_0x4ef5b3(0x200)][_0x4ef5b3(0x21f)](_0x4ef5b3(0x1d7)+_0x588cee+'\x27');const _0x5acbf3=_0x37cb86(readFileSync(_0x834481),_0x588cee,{'sourceType':'module','allowAwaitOutsideFunction':!![]});if(_0x5acbf3)conn[_0x4ef5b3(0x200)][_0x4ef5b3(0x1cd)]('\x0aSyntax\x20error\x20while\x20loading\x20\x27'+_0x588cee+'\x27\x0a'+format(_0x5acbf3));else try{const _0x3049b0=await import(global[_0x4ef5b3(0x25b)](_0x834481)+_0x4ef5b3(0x266)+Date['now']());global['plugins'][_0x588cee]=_0x3049b0[_0x4ef5b3(0x218)]||_0x3049b0;}catch(_0x8a1ff7){conn[_0x4ef5b3(0x200)][_0x4ef5b3(0x1cd)](_0x4ef5b3(0x1fb)+_0x588cee+'\x0a'+format(_0x8a1ff7)+'\x27');}finally{global[_0x4ef5b3(0x26b)]=Object[_0x4ef5b3(0x22e)](Object[_0x4ef5b3(0x246)](global[_0x4ef5b3(0x26b)])[_0x4ef5b3(0x1ea)](([_0x58d538],[_0x168b1c])=>_0x58d538[_0x4ef5b3(0x264)](_0x168b1c)));}}},Object[_0x374239(0x25a)](global[_0x374239(0x1ee)]),watch(pluginFolder,global['reload']),await global[_0x374239(0x22c)]();async function _quickTest(){const _0x26cbcf=_0x374239,_0x1b809a=await Promise[_0x26cbcf(0x214)]([spawn(_0x26cbcf(0x1e9)),spawn(_0x26cbcf(0x289)),spawn('ffmpeg',[_0x26cbcf(0x221),_0x26cbcf(0x21b),'error',_0x26cbcf(0x1c9),_0x26cbcf(0x1d2),_0x26cbcf(0x233),'1','-f',_0x26cbcf(0x1cc),'-']),spawn(_0x26cbcf(0x231)),spawn(_0x26cbcf(0x245)),spawn('gm'),spawn(_0x26cbcf(0x24e),[_0x26cbcf(0x1ed)])][_0x26cbcf(0x229)](_0x4bafa9=>{const _0x113f9e=_0x26cbcf;return Promise[_0x113f9e(0x232)]([new Promise(_0x17cf1f=>{_0x4bafa9['on']('close',_0x4039e7=>{_0x17cf1f(_0x4039e7!==0x7f);});}),new Promise(_0x107d15=>{const _0x341715=_0x113f9e;_0x4bafa9['on'](_0x341715(0x1cd),_0x5aa277=>_0x107d15(![]));})]);})),[_0xa56249,_0x4c3d93,_0x5029b6,_0x407095,_0x33ebe3,_0x49cf13,_0x334cdc]=_0x1b809a,_0x37a54f=global[_0x26cbcf(0x283)]={'ffmpeg':_0xa56249,'ffprobe':_0x4c3d93,'ffmpegWebp':_0x5029b6,'convert':_0x407095,'magick':_0x33ebe3,'gm':_0x49cf13,'find':_0x334cdc};Object[_0x26cbcf(0x25a)](global[_0x26cbcf(0x283)]);}const actions=[{'func':purgeSession,'message':_0x374239(0x1d5)}];for(const action of actions){setInterval(async()=>{const _0x58a5df=_0x374239;if(stopped==='close'||!conn||!conn['user'])return;await action[_0x58a5df(0x20e)](),console[_0x58a5df(0x280)](_0x499532['cyanBright'](action[_0x58a5df(0x257)]+'\x0a'));},0xa*0x3c*0x3e8);}_quickTest()[_0x374239(0x20f)](console[_0x374239(0x1cd)]);
+process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '1'
+import './config.js'
+
+import dotenv from 'dotenv'
+import { existsSync, readFileSync, readdirSync, unlinkSync, watch } from 'fs'
+import { createRequire } from 'module'
+import path, { join } from 'path'
+import { platform } from 'process'
+import { fileURLToPath, pathToFileURL } from 'url'
+import * as ws from 'ws'
+import processTxtAndSaveCredentials from './lib/makesession.js'
+import clearTmp from './lib/tempclear.js'
+global.__filename = function filename(pathURL = import.meta.url, rmPrefix = platform !== 'win32') {
+ return rmPrefix
+ ? /file:\/\/\//.test(pathURL)
+ ? fileURLToPath(pathURL)
+ : pathURL
+ : pathToFileURL(pathURL).toString()
+}
+global.__dirname = function dirname(pathURL) {
+ return path.dirname(global.__filename(pathURL, true))
+}
+global.__require = function require(dir = import.meta.url) {
+ return createRequire(dir)
+}
+global.gurubot = 'https://www.guruapi.tech/api'
+
+import chalk from 'chalk'
+import { spawn } from 'child_process'
+import lodash from 'lodash'
+import { JSONFile, Low } from 'lowdb'
+import NodeCache from 'node-cache'
+import { default as Pino, default as pino } from 'pino'
+import syntaxerror from 'syntax-error'
+import { format } from 'util'
+import yargs from 'yargs'
+import CloudDBAdapter from './lib/cloudDBAdapter.js'
+import { MongoDB } from './lib/mongoDB.js'
+import { makeWASocket, protoType, serialize } from './lib/simple.js'
+
+const {
+ DisconnectReason,
+ useMultiFileAuthState,
+ MessageRetryMap,
+ fetchLatestWaWebVersion,
+ makeCacheableSignalKeyStore,
+ makeInMemoryStore,
+ proto,
+ delay,
+ jidNormalizedUser,
+ PHONENUMBER_MCC,
+} = await (
+ await import('@whiskeysockets/baileys')
+).default
+
+import readline from 'readline'
+
+dotenv.config()
+
+async function main() {
+ const txt = process.env.SESSION_ID
+
+ if (!txt) {
+ console.error('Environment variable not found.')
+ return
+ }
+
+ try {
+ await processTxtAndSaveCredentials(txt)
+ console.log('processTxtAndSaveCredentials completed.')
+ } catch (error) {
+ console.error('Error:', error)
+ }
+}
+
+main()
+
+await delay(1000 * 10)
+
+async function gandu() {
+ try {
+ const packageJson = readFileSync('package.json', 'utf8')
+ const packageData = JSON.parse(packageJson)
+ const gnome = packageData.author && packageData.author.name
+
+ if (!gnome) {
+ console.log('LOl')
+ process.exit(1)
+ }
+
+ const lund = Buffer.from('Z3VydQ==', 'base64').toString()
+ const lawde = Buffer.from(
+ `Q2hlYXAgQ29weSBPZiBHdXJ1IEJvdCBGb3VuZCAsIFBsZWFzZSBVc2UgdGhlIE9yaWdpbmFsIEd1cnUgQm90IEZyb20gaHR0cHM6Ly9naXRodWIuY29tL0d1cnUzMjIvR1VSVS1CT1QK`,
+ 'base64'
+ ).toString()
+ const endi = Buffer.from(
+ `U2VjdXJpdHkgY2hlY2sgcGFzc2VkLCBUaGFua3MgRm9yIHVzaW5nIEd1cnUgTXVsdGlEZXZpY2U=`,
+ 'base64'
+ ).toString()
+
+ if (gnome && gnome.trim().toLowerCase() !== lund.toLowerCase()) {
+ console.log(lawde)
+ process.exit(1)
+ } else {
+ console.log(`${endi}`)
+ console.log(chalk.bgBlack(chalk.redBright('initializing Guru Bot')))
+ }
+ } catch (error) {
+ console.error('Error:', error)
+ }
+}
+
+gandu()
+
+const pairingCode = !!global.pairingNumber || process.argv.includes('--pairing-code')
+const useQr = process.argv.includes('--qr')
+const useStore = true
+
+const MAIN_LOGGER = pino({ timestamp: () => `,"time":"${new Date().toJSON()}"` })
+
+const logger = MAIN_LOGGER.child({})
+logger.level = 'fatal'
+
+const store = useStore ? makeInMemoryStore({ logger }) : undefined
+store?.readFromFile('./session.json')
+
+setInterval(() => {
+ store?.writeToFile('./session.json')
+}, 10000 * 6)
+
+const msgRetryCounterCache = new NodeCache()
+
+const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+})
+const question = text => new Promise(resolve => rl.question(text, resolve))
+
+const { CONNECTING } = ws
+const { chain } = lodash
+const PORT = process.env.PORT || process.env.SERVER_PORT || 3000
+
+protoType()
+serialize()
+
+global.API = (name, path = '/', query = {}, apikeyqueryname) =>
+ (name in global.APIs ? global.APIs[name] : name) +
+ path +
+ (query || apikeyqueryname
+ ? '?' +
+ new URLSearchParams(
+ Object.entries({
+ ...query,
+ ...(apikeyqueryname
+ ? {
+ [apikeyqueryname]: global.APIKeys[name in global.APIs ? global.APIs[name] : name],
+ }
+ : {}),
+ })
+ )
+ : '')
+global.timestamp = {
+ start: new Date(),
+}
+
+const __dirname = global.__dirname(import.meta.url)
+global.opts = new Object(yargs(process.argv.slice(2)).exitProcess(false).parse())
+global.prefix = new RegExp(
+ '^[' +
+ (process.env.PREFIX || '*/i!#$%+ยฃยขโฌยฅ^ยฐ=ยถโรรทฯโโยฉยฎ:;?&.\\-.@').replace(
+ /[|\\{}()[\]^$+*?.\-\^]/g,
+ '\\$&'
+ ) +
+ ']'
+)
+global.opts['db'] = process.env.DATABASE_URL
+
+global.db = new Low(
+ /https?:\/\//.test(opts['db'] || '')
+ ? new CloudDBAdapter(opts['db'])
+ : /mongodb(\+srv)?:\/\//i.test(opts['db'])
+ ? new MongoDB(opts['db'])
+ : new JSONFile(`${opts._[0] ? opts._[0] + '_' : ''}database.json`)
+)
+
+global.DATABASE = global.db
+
+global.loadDatabase = async function loadDatabase() {
+ if (global.db.READ)
+ return new Promise(resolve =>
+ setInterval(async function () {
+ if (!global.db.READ) {
+ clearInterval(this)
+ resolve(global.db.data == null ? global.loadDatabase() : global.db.data)
+ }
+ }, 1 * 1000)
+ )
+ if (global.db.data !== null) return
+ global.db.READ = true
+ await global.db.read().catch(console.error)
+ global.db.READ = null
+ global.db.data = {
+ users: {},
+ chats: {},
+ stats: {},
+ msgs: {},
+ sticker: {},
+ settings: {},
+ ...(global.db.data || {}),
+ }
+ global.db.chain = chain(global.db.data)
+}
+loadDatabase()
+global.authFolder = `session`
+const { state, saveCreds } = await useMultiFileAuthState(global.authFolder)
+let { version, isLatest } = await fetchLatestWaWebVersion()
+
+const connectionOptions = {
+ version,
+ logger: Pino({
+ level: 'fatal',
+ }),
+ printQRInTerminal: !pairingCode,
+ browser: ['chrome (linux)', '', ''],
+ auth: {
+ creds: state.creds,
+ keys: makeCacheableSignalKeyStore(
+ state.keys,
+ Pino().child({
+ level: 'fatal',
+ stream: 'store',
+ })
+ ),
+ },
+ markOnlineOnConnect: true,
+ generateHighQualityLinkPreview: true,
+ getMessage: async key => {
+ let jid = jidNormalizedUser(key.remoteJid)
+ let msg = await store.loadMessage(jid, key.id)
+ return msg?.message || ''
+ },
+ patchMessageBeforeSending: (message) => {
+ const requiresPatch = !!(
+ message.buttonsMessage
+ || message.templateMessage
+ || message.listMessage
+ );
+ if (requiresPatch) {
+ message = {
+ viewOnceMessage: {
+ message: {
+ messageContextInfo: {
+ deviceListMetadataVersion: 2,
+ deviceListMetadata: {},
+ },
+ ...message,
+ },
+ },
+ };
+ }
+
+ return message;
+},
+ msgRetryCounterCache,
+ defaultQueryTimeoutMs: undefined,
+}
+
+global.conn = makeWASocket(connectionOptions)
+conn.isInit = false
+store?.bind(conn.ev)
+
+if (pairingCode && !conn.authState.creds.registered) {
+ let phoneNumber
+ if (!!global.pairingNumber) {
+ phoneNumber = global.pairingNumber.replace(/[^0-9]/g, '')
+
+ if (!Object.keys(PHONENUMBER_MCC).some(v => phoneNumber.startsWith(v))) {
+ console.log(
+ chalk.bgBlack(chalk.redBright("Start with your country's WhatsApp code, Example : 62xxx"))
+ )
+ process.exit(0)
+ }
+ } else {
+ phoneNumber = await question(
+ chalk.bgBlack(chalk.greenBright(`Please type your WhatsApp number : `))
+ )
+ phoneNumber = phoneNumber.replace(/[^0-9]/g, '')
+
+ if (!Object.keys(PHONENUMBER_MCC).some(v => phoneNumber.startsWith(v))) {
+ console.log(
+ chalk.bgBlack(chalk.redBright("Start with your country's WhatsApp code, Example : 62xxx"))
+ )
+
+ phoneNumber = await question(
+ chalk.bgBlack(chalk.greenBright(`Please type your WhatsApp number : `))
+ )
+ phoneNumber = phoneNumber.replace(/[^0-9]/g, '')
+ rl.close()
+ }
+ }
+
+ setTimeout(async () => {
+ let code = await conn.requestPairingCode(phoneNumber)
+ code = code?.match(/.{1,4}/g)?.join('-') || code
+ const pairingCode =
+ chalk.bold.greenBright('Your Pairing Code:') + ' ' + chalk.bgGreenBright(chalk.black(code))
+ console.log(pairingCode)
+ }, 3000)
+}
+
+conn.logger.info('\nWaiting For Login\n')
+
+if (!opts['test']) {
+ if (global.db) {
+ setInterval(async () => {
+ if (global.db.data) await global.db.write()
+ if (opts['autocleartmp'] && (global.support || {}).find)
+ (tmp = [os.tmpdir(), 'tmp']),
+ tmp.forEach(filename =>
+ cp.spawn('find', [filename, '-amin', '3', '-type', 'f', '-delete'])
+ )
+ }, 30 * 1000)
+ }
+}
+
+if (opts['server']) (await import('./server.js')).default(global.conn, PORT)
+
+function runCleanup() {
+ clearTmp()
+ .then(() => {
+ console.log('Temporary file cleanup completed.')
+ })
+ .catch(error => {
+ console.error('An error occurred during temporary file cleanup:', error)
+ })
+ .finally(() => {
+ // 2 minutes
+ setTimeout(runCleanup, 1000 * 60 * 2)
+ })
+}
+
+runCleanup()
+
+function clearsession() {
+ let prekey = []
+ const directorio = readdirSync('./session')
+ const filesFolderPreKeys = directorio.filter(file => {
+ return file.startsWith('pre-key-')
+ })
+ prekey = [...prekey, ...filesFolderPreKeys]
+ filesFolderPreKeys.forEach(files => {
+ unlinkSync(`./session/${files}`)
+ })
+}
+
+async function connectionUpdate(update) {
+ const { connection, lastDisconnect, isNewLogin, qr } = update
+ global.stopped = connection
+ if (isNewLogin) conn.isInit = true
+ const code =
+ lastDisconnect?.error?.output?.statusCode || lastDisconnect?.error?.output?.payload?.statusCode
+ if (code && code !== DisconnectReason.loggedOut && conn?.ws.socket == null) {
+ conn.logger.info(await global.reloadHandler(true).catch(console.error))
+ }
+ if (code && code == DisconnectReason.restartRequired) {
+ conn.logger.info(chalk.yellow('\n๐ฉRestart Required... Restarting'))
+ process.send('reset')
+ }
+
+ if (global.db.data == null) loadDatabase()
+ if (!pairingCode && useQr && qr != 0 && qr != undefined) {
+ conn.logger.info(chalk.yellow('\nLogging in....'))
+ }
+ if (connection === 'open') {
+ const { jid, name } = conn.user
+
+ let msgf = `Hai๐คฉ${name} Congrats you have successfully deployed STAR-BOT\nJoin my support Channel for any Query\n https://whatsapp.com/channel/0029VaBcXo4JJhzW9c1uVD2X`
+
+ let gmes = conn.sendMessage(
+ jid,
+ {
+ text: msgf,
+ mentions: [jid],
+ },
+ {
+ quoted: null,
+ }
+ )
+
+ conn.logger.info(chalk.yellow('\n๐ฉ R E A D Y'))
+ }
+
+ if (connection == 'close') {
+ conn.logger.error(chalk.yellow(`\nconnection closed....Get a New Session`))
+ }
+}
+
+process.on('uncaughtException', console.error)
+
+let isInit = true
+let handler = await import('./handler.js')
+global.reloadHandler = async function (restatConn) {
+ try {
+ const Handler = await import(`./handler.js?update=${Date.now()}`).catch(console.error)
+ if (Object.keys(Handler || {}).length) handler = Handler
+ } catch (error) {
+ console.error
+ }
+ if (restatConn) {
+ const oldChats = global.conn.chats
+ try {
+ global.conn.ws.close()
+ } catch {}
+ conn.ev.removeAllListeners()
+ global.conn = makeWASocket(connectionOptions, {
+ chats: oldChats,
+ })
+ isInit = true
+ }
+ if (!isInit) {
+ conn.ev.off('messages.upsert', conn.handler)
+ conn.ev.off('messages.update', conn.pollUpdate)
+ conn.ev.off('group-participants.update', conn.participantsUpdate)
+ conn.ev.off('groups.update', conn.groupsUpdate)
+ conn.ev.off('message.delete', conn.onDelete)
+ conn.ev.off('presence.update', conn.presenceUpdate)
+ conn.ev.off('connection.update', conn.connectionUpdate)
+ conn.ev.off('creds.update', conn.credsUpdate)
+ }
+
+ conn.welcome = ` Hello @user!\n\n๐ *WELCOME* to the group @group!\n\n๐ Please read the *DESCRIPTION* @desc.`
+ conn.bye = `๐GOODBYE @user \n\nSee you later!`
+ conn.spromote = `*@user* has been promoted to an admin!`
+ conn.sdemote = `*@user* is no longer an admin.`
+ conn.sDesc = `The group description has been updated to:\n@desc`
+ conn.sSubject = `The group title has been changed to:\n@group`
+ conn.sIcon = `The group icon has been updated!`
+ conn.sRevoke = ` The group link has been changed to:\n@revoke`
+ conn.sAnnounceOn = `The group is now *CLOSED*!\nOnly admins can send messages.`
+ conn.sAnnounceOff = `The group is now *OPEN*!\nAll participants can send messages.`
+ conn.sRestrictOn = `Edit Group Info has been restricted to admins only!`
+ conn.sRestrictOff = `Edit Group Info is now available to all participants!`
+
+ conn.handler = handler.handler.bind(global.conn)
+ conn.pollUpdate = handler.pollUpdate.bind(global.conn)
+ conn.participantsUpdate = handler.participantsUpdate.bind(global.conn)
+ conn.groupsUpdate = handler.groupsUpdate.bind(global.conn)
+ conn.onDelete = handler.deleteUpdate.bind(global.conn)
+ conn.presenceUpdate = handler.presenceUpdate.bind(global.conn)
+ conn.connectionUpdate = connectionUpdate.bind(global.conn)
+ conn.credsUpdate = saveCreds.bind(global.conn, true)
+
+ const currentDateTime = new Date()
+ const messageDateTime = new Date(conn.ev)
+ if (currentDateTime >= messageDateTime) {
+ const chats = Object.entries(conn.chats)
+ .filter(([jid, chat]) => !jid.endsWith('@g.us') && chat.isChats)
+ .map(v => v[0])
+ } else {
+ const chats = Object.entries(conn.chats)
+ .filter(([jid, chat]) => !jid.endsWith('@g.us') && chat.isChats)
+ .map(v => v[0])
+ }
+
+ conn.ev.on('messages.upsert', conn.handler)
+ conn.ev.on('messages.update', conn.pollUpdate)
+ conn.ev.on('group-participants.update', conn.participantsUpdate)
+ conn.ev.on('groups.update', conn.groupsUpdate)
+ conn.ev.on('message.delete', conn.onDelete)
+ conn.ev.on('presence.update', conn.presenceUpdate)
+ conn.ev.on('connection.update', conn.connectionUpdate)
+ conn.ev.on('creds.update', conn.credsUpdate)
+ isInit = false
+ return true
+}
+
+const pluginFolder = global.__dirname(join(__dirname, './plugins/index'))
+const pluginFilter = filename => /\.js$/.test(filename)
+global.plugins = {}
+async function filesInit() {
+ for (const filename of readdirSync(pluginFolder).filter(pluginFilter)) {
+ try {
+ const file = global.__filename(join(pluginFolder, filename))
+ const module = await import(file)
+ global.plugins[filename] = module.default || module
+ } catch (e) {
+ conn.logger.error(e)
+ delete global.plugins[filename]
+ }
+ }
+}
+filesInit()
+ .then(_ => Object.keys(global.plugins))
+ .catch(console.error)
+
+global.reload = async (_ev, filename) => {
+ if (pluginFilter(filename)) {
+ const dir = global.__filename(join(pluginFolder, filename), true)
+ if (filename in global.plugins) {
+ if (existsSync(dir)) conn.logger.info(`\nUpdated plugin - '${filename}'`)
+ else {
+ conn.logger.warn(`\nDeleted plugin - '${filename}'`)
+ return delete global.plugins[filename]
+ }
+ } else conn.logger.info(`\nNew plugin - '${filename}'`)
+ const err = syntaxerror(readFileSync(dir), filename, {
+ sourceType: 'module',
+ allowAwaitOutsideFunction: true,
+ })
+ if (err) conn.logger.error(`\nSyntax error while loading '${filename}'\n${format(err)}`)
+ else {
+ try {
+ const module = await import(`${global.__filename(dir)}?update=${Date.now()}`)
+ global.plugins[filename] = module.default || module
+ } catch (e) {
+ conn.logger.error(`\nError require plugin '${filename}\n${format(e)}'`)
+ } finally {
+ global.plugins = Object.fromEntries(
+ Object.entries(global.plugins).sort(([a], [b]) => a.localeCompare(b))
+ )
+ }
+ }
+ }
+}
+Object.freeze(global.reload)
+watch(pluginFolder, global.reload)
+await global.reloadHandler()
+async function _quickTest() {
+ const test = await Promise.all(
+ [
+ spawn('ffmpeg'),
+ spawn('ffprobe'),
+ spawn('ffmpeg', [
+ '-hide_banner',
+ '-loglevel',
+ 'error',
+ '-filter_complex',
+ 'color',
+ '-frames:v',
+ '1',
+ '-f',
+ 'webp',
+ '-',
+ ]),
+ spawn('convert'),
+ spawn('magick'),
+ spawn('gm'),
+ spawn('find', ['--version']),
+ ].map(p => {
+ return Promise.race([
+ new Promise(resolve => {
+ p.on('close', code => {
+ resolve(code !== 127)
+ })
+ }),
+ new Promise(resolve => {
+ p.on('error', _ => resolve(false))
+ }),
+ ])
+ })
+ )
+ const [ffmpeg, ffprobe, ffmpegWebp, convert, magick, gm, find] = test
+ const s = (global.support = {
+ ffmpeg,
+ ffprobe,
+ ffmpegWebp,
+ convert,
+ magick,
+ gm,
+ find,
+ })
+ Object.freeze(global.support)
+}
+
+async function saafsafai() {
+ if (stopped === 'close' || !conn || !conn.user) return
+ clearsession()
+ console.log(chalk.cyanBright('\nStored Sessions Cleared'))
+}
+
+setInterval(saafsafai, 10 * 60 * 1000)
+
+_quickTest().catch(console.error)
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index 0dc936aa..b97ed0b2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
- Apache License
+ Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
diff --git a/Procfile b/Procfile
index 063b78f4..5953f692 100644
--- a/Procfile
+++ b/Procfile
@@ -1 +1 @@
-web: npm start
+ web: npm start
diff --git a/README.md b/README.md
index 5545a373..147e601e 100644
--- a/README.md
+++ b/README.md
@@ -1,198 +1,101 @@
-[](#table-of-contents)
- [๐ธ ๐น ๐ฆ ๐ท -๐ฒ ๐ฉ ](https://wa.me/+2347045035241)
-[](#table-of-contents)
-
-
-
-
-[`โน๏ธIN CASE OF HELP CONCERNING DEPLOYMENT
-`](https://wa.me/+2347045035241)
-
-
-
-## ๐ ```Bot Intro```๐
-[](https://wa.me/2347045035241)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ๐ ๐ฆ๐ง๐๐ฅ-๐ ๐-๐ฉ๐ฎ๐
-
-
-### โน๏ธ **ABOUT STAR-MD-V2**
-***STAR-MD-V2 is a ๐ versatile Multi-Device WhatsApp bot ๐ค recoded by the talented [Excel Amadi](https://github.com/Xcelsama) It offers a wide array of features, making it an advanced and user-friendly bot for various purposes. ๐๐ฑ With its intuitive interface and robust capabilities, users can unlock endless possibilities ๐ and streamline their communication across devices with ease.***
-
-
-
-
-
-
-
-## โญ `Star This Repo`
-If you find STAR-MD-V2 helpful, consider giving it a star โญ to show your appreciation,Support.
+# [STAR-BOT](https://github.com/Xcelsama)
+
+>STAR-MD-V2 is based on :
+>- [GURU BOT](https://github.com/Guru322/GURU-BOT) by [Guru](https://github.com/Guru322) (License: Apache License 2.0)
+>
+> :octocat: Don't forget to check out! :point_right: [GURU BOT](https://github.com/Guru322/GURU-BOT)
+>๐คThanks to Salman & his team โ
-๐๐ต๐ด๐ฐ๐๐๐๐ด๐๐
+## `BOT-INTRO`
+STAR-MD-V2 is a ๐ versatile Multi-Device WhatsApp bot ๐ค recoded by the talented [Excel Amadi](https://github.com/Xcelsama) It offers a wide array of features, making it an advanced and user-friendly bot for various purposes. ๐๐ฑ With its intuitive interface and robust capabilities, users can unlock endless possibilities ๐ and streamline their communication across devices with ease.
+## `Features`
-โ Multi-Device Support
-โ AI Photo Enhancement
-โ Downloader Commands
-โ Hidden NSFW Commands
-โ Logo Commands
-โ Anime Commands
-โ Economy Menu
-โ Various Games
-โ Audio/Video Editor Commands
-โ Others......
-## ๐ ๏ธ `Installation Procedure`
+| Function | Confirmation |
+------------------|--------------
+|- Free Deployment|โ
๏ธ|
+|- File Conversion|โ
๏ธ|
+|- Downloads |โ
๏ธ|
+|- Games|โ
๏ธ|
+|- Group Management|โ
๏ธ|
+|- Image features|โ
๏ธ|
+|- Weather Updates|โ
๏ธ|
+|- Reminders|โ
๏ธ|
+|- Translations|โ
๏ธ|
+|- Custom Commands|โ
๏ธ|
+|- Integration|โ
๏ธ|
+|- Customization|โ
๏ธ|
+|- Customizable | โ
๏ธ|
-
-โFORK THE REPOSITORY
-
-
-
-
-
-โGet Session ID (PAIR-CODE)
-
-
-
-
-โ Get Session ID (SCAN QR)
-
-
-
-
-โ๏ธUSE THIS IF YOU DON'T HAVE REPLIT
-
-
-
+# `SETUP PROCEDURE`
-## ๐ `Deployments`
-#### DEPLOY TO HEROKU
+ ## โญ๏ธ`Star This Repo` โญ๏ธ
-โ If You don't have a account in Heroku. Create a account.
-
-
+Give STAR-BOT a star to show your appreciation and support ๐ to the Developers.
-โNow Deploy
-
-
-#### DEPLOY TO REPLIT
- If You don't have an account in Replit. Create a account.
-
-
- Now Deploy
-
-
+## ๐ฏ `Installation Procedure` ๐ฏ
+## TODO: ```Fork STAR-BOT```
+
-#### DEPLOY TO CODESPACE
- If You don't have a account in Codespace. Create a account.
-
-
-
- Now Deploy
-
-
-
-#### DEPLOY TO OKTETO
+ ## TODO: ```Get SESSION_ID```
+
+
-If You don't have a account in Okteto. Create a account.
-
-
+## TODO: ```DEPLOYMENT```
-Now Deploy
-
-
+>STAR-BOT CAN BE DEPLOYED ON VARIOUS HOSTING PLATFORM JUST FORK & IMPORT THE FORKED REPO ADD ENVIRONMENT VARIABLES : SESSION_ID & DATABASE_URL: MONGODB_URI
-#### DEPLOY TO RAILWAY
+>You must not add DATABASE_URL
- If You don't have a account in Railway. Create a account.
-
-
+## ```STAR-BOT CAN BE DEPLOYED ON```
+
+
+### ```RENDER```
- Now Deploy
-
-
+ >Create Render account using Github
-#### DEPLOY TO MONGENIUS
+
+
+ >Then Import You forked Repo & Deploy
+Add Environment Variables SESSION_ID & DATABASE_URL Then Click Deploy.
+
- If You don't have a account in Mongenius. Create a account.
-
-
+
- Now Deploy
-
-
+- After Deployment
-#### DEPLOY TO COOLIFY
+>Create Account on uptime.robot to keep the bot stable Copy the Url of the bot from render then paste in uptime.robot,I'll advice you to download the app
- If You don't have a account in Coolify. Create a account.
-
-
+[CREATE](https://uptimerobot.com/)
+
- Now Deploy
-
-
+### ```HEROKU```
-#### DEPLOY TO RENDER
+>Create Account if You don't have
- If You don't have a account in Render. Create a account.
-
-
+
- Now Deploy
-
-
+>Then Add the Environment Variables & Deploy
-## `NEW DEPLOYMENT`
-NOW Deploy๐
-
-## DEPLOY IN KOYEB
-[](https://app.koyeb.com/auth/signup)
-## `OWNER`
-
+
-
+### ```KOYEB```
-## ๐ `Reminder`
-Misusing the bot may result in a ban from WhatsApp. Use at your own risk.
+>CREATE ACCOUNT THEN ADD ENVIRONMENT VARIABLES AND DEPLOY
+
+
+## ```๐ค THANKS TO EVERYONE THAT MADE THIS PROJECT POSSIBLE```
-## `Reminder`
-
-- This bot is not made by `WhatsApp Inc.` So misusing the bot might `ban` your `WhatsApp account!`(Though your WhatsApp account can be unbanned only once.)
-- I am not responsible for banning your account.
-- Use at your own risk by keeping this warning in mind.
-[](#table-of-contents)
- [`๐กCredits`](https://github.com/salmanytofficial)
-[](#table-of-contents)
\ No newline at end of file
+ยฉXcelsama 2024
diff --git a/STAR-V2.jpg b/STAR-V2.jpg
new file mode 100644
index 00000000..0ea114e2
Binary files /dev/null and b/STAR-V2.jpg differ
diff --git a/STAR.jpg b/STAR.jpg
new file mode 100644
index 00000000..4dc2876c
Binary files /dev/null and b/STAR.jpg differ
diff --git a/XLICON/XLICON.js b/STAR/STAR.js
similarity index 93%
rename from XLICON/XLICON.js
rename to STAR/STAR.js
index ae94bfe5..9bde530f 100644
--- a/XLICON/XLICON.js
+++ b/STAR/STAR.js
@@ -1,4 +1,4 @@
/**
* @STAR_V2
* https://github.com/Xcelsama/STAR-MD-V2
- */
\ No newline at end of file
+ */
diff --git a/XLICON/language.json b/STAR/language.json
similarity index 100%
rename from XLICON/language.json
rename to STAR/language.json
diff --git a/Termux-Guide.md b/Termux-Guide.md
index 68738dee..b5e0c779 100644
--- a/Termux-Guide.md
+++ b/Termux-Guide.md
@@ -1,4 +1,4 @@
-# Guru-bot Termux-Hosting-Guide
+# STAR-bot Termux-Hosting-Guide
## Prerequisites
@@ -12,8 +12,8 @@
Run the following commands to clone the repo (Use your fork)
```SH
-> git clone https://github.com/salmanytofficial/XLICON-V2-MD
-> cd XLICON-V2-MD
+> git clone https://github.com/Xcelsama/STAR-MD-V2
+> cd STAR-MD-V2
```
Run this following command to install the dependencies
@@ -29,4 +29,4 @@
Running the above command will start the bot. To authenticate scan the QR which shows up in the terminal using the WA-Web Scanner on your WhatsApp . Good Luck!
- [Set it up on Heroku](https://github.com/salmanytofficial/XLICON-V2-MD/blob/master/Heroku-Hosting-Guide.md)
+ [Set it up on Heroku](https://github.com/Xcelsam/STAR-MD-V2/blob/master/Heroku-Hosting-Guide.md)
diff --git a/XLICON.jpg b/XLICON.jpg
deleted file mode 100644
index fa79b212..00000000
Binary files a/XLICON.jpg and /dev/null differ
diff --git a/app.json b/app.json
index 75e2b5be..547e9373 100644
--- a/app.json
+++ b/app.json
@@ -3,7 +3,7 @@
"description": "A whatsapp bot with rich functions created by Excel",
"logo": "https://telegra.ph/file/f2fa9732e0e26bbb0bfb0.jpg",
"keywords": [
- "whatsapp bot"
+ "STAR-MD-V2"
],
"repository": "https://github.com/Xcelsama/STAR-MD-V2/main",
"stack": "container",
@@ -11,12 +11,12 @@
"DATABASE_URL": {
"description": "your mongodb database url",
"required": false,
- "value": "mongodb+srv://salmanahmad:s4salmanyt@cluster0.szcj2eo.mongodb.net/?retryWrites=true&w=majority"
+ "value": "mongodb+srv://starmd:xcelsama@excel.xmckecq.mongodb.net"
},
"SESSION_ID": {
"description": "your session id",
"required": true,
- "value": ""
+ "value": "Xlicon_7f23553c-49be-4ede-8b4a-93b0203bfe53"
},
"MODE": {
"description": "mode public or private",
@@ -31,7 +31,7 @@
"HKEY": {
"description": "Put your Heroku api key Here , Get one from here https://dashboard.heroku.com/account",
"required": true,
- "value": ""
+ "value":" 8cf895b5-dbdf-4d5d-b2a1-b31319db8aa6"
},
"HAPP": {
"description": "Put the Heroku app name, same as above entered",
@@ -56,7 +56,7 @@
"REMOVEBG_KEY": {
"description": "your RemoveBg api key",
"required": false,
- "value": ""
+ "value": "neLbXXrp8bSDcohnp1CW5UEa"
}
},
"buildpacks": [
diff --git a/cai_nicknames.json b/cai_nicknames.json
index 9cc0065b..4230d8ff 100644
--- a/cai_nicknames.json
+++ b/cai_nicknames.json
@@ -10,5 +10,5 @@
"dante": "-uwWte6vXPHCO2ytjeNa0lhBIxiETF4iZ0oO-KVjciQ",
"vergil": "XUtR5xIhxarp_n5sA44Wa8_NOp-7pa0HgsltF099y0s",
"krishna": "8NRtqrbGa_il09tnwolYuFJk7fmOknZEs7uDIraIgAU",
- "jesus": "SAAEhhxkzNtb80wqrqr3dMGPTskr3ofyayOprzau-Os"
- }
\ No newline at end of file
+ "jesus": "SAAEhhxkzNtb80wqrqr3dMGPTskr3ofyayOprzau-Os"
+ }
diff --git a/config.js b/config.js
index b54e3e60..0933d226 100644
--- a/config.js
+++ b/config.js
@@ -7,15 +7,16 @@ import axios from 'axios'
global.owner = [
- ['+2347045035241','Excel Amadi',true]
-
+ ['2347045035241', 'EXCEL', true],
+ ['23433436666', 'Excel', true],
+ ['']
] //Number of owners
-//global.pairingNumber = "" //put your bot number here
+//global.pairingNumber = "2347045035241" //put your bot number here
-global.mods = ['2347045035241']
-global.prems = ['2347045035241']
-global.allowed = ['2347045035241']
+global.mods = ['2347045035241','2348021779696']
+global.prems = ['2347045035241', '2348021779696', '2347045038687']
+global.allowed = ['2347045035241', '2348021779696', '2347045038687']
global.keysZens = ['c2459db922', '37CC845916', '6fb0eff124']
global.keysxxx = keysZens[Math.floor(keysZens.length * Math.random())]
global.keysxteammm = ['29d4b59a4aa687ca', '5LTV57azwaid7dXfz5fzJu', 'cb15ed422c71a2fb', '5bd33b276d41d6b4', 'HIRO', 'kurrxd09', 'ebb6251cc00f9c63']
@@ -23,7 +24,6 @@ global.keysxteam = keysxteammm[Math.floor(keysxteammm.length * Math.random())]
global.keysneoxrrr = ['5VC9rvNx', 'cfALv5']
global.keysneoxr = keysneoxrrr[Math.floor(keysneoxrrr.length * Math.random())]
global.lolkeysapi = ['GataDios']
-global.beta = 'mLxstUwm'
global.APIs = { // API Prefix
// name: 'https://website'
@@ -36,7 +36,7 @@ global.APIs = { // API Prefix
akuari: 'https://api.akuari.my.id',
akuari2: 'https://apimu.my.id',
nrtm: 'https://fg-nrtm.ddns.net',
- bg: 'http://bochil.ddns.net',
+ bg: 'http://bochil.ddns.net',
fgmods: 'https://api-fgmods.ddns.net'
}
global.APIKeys = { // APIKey Here
@@ -50,33 +50,34 @@ global.APIKeys = { // APIKey Here
}
// Sticker WM
-global.botname = 'STAR-MD'
+global.botname = 'ยฉSTAR-MD-V2'
global.premium = 'true'
-global.packname = 'Excel'
-global.author = '@EXCEL'
-global.menuvid = 'https://i.imgur.com/NtEhT2w.mp4'
-global.igfg = 'โขโ Follow My channel\nhttps://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m'
-global.dygp = 'https://chat.whatsapp.com/EmP3syvou18HrZk6R6nTAK'
+global.packname = 'ยฉ๐๐๐ฐ๐-๐ผ๐ณ'
+global.author = '@๐ด๐ก๐๐๐'
+global.menuvid = 'https://i.imgur.com/BPQbguA.mp4'
+global.Channel = 'https://whatsapp.com/channel/0029VaBcXo4JJhzW9c1uVD2X'
+global.dygp = 'https://whatsapp.com/channel/0029VaBcXo4JJhzW9c1uVD2X'
global.fgsc = 'https://github.com/Xcelsama/STAR-MD-V2'
-global.fgyt = 'https://youtube.com'
-global.fgpyp = 'https://youtube.com'
-global.fglog = 'XLICON.jpg'
-global.thumb = fs.readFileSync('./XLICON.jpg')
+global.Channel2 = 'https://whatsapp.com/channel/0029VaBcXo4JJhzW9c1uVD2X'
+global.Wa = 'https://wa.me/2347045035241'
+global.fglog = 'STAR.jpg'
+global.thumb = fs.readFileSync('./STAR.jpg')
+global.shizokeys = 'shizo'
-global.wait = '*๐ฃ _STAR IS LOADING..._*\n*โฐโฐโฐโฑโฑโฑโฑโฑโญ*'
+global.wait = '*๐ _STAR IS LOADING WAIT..._*\n*โฐโฐโฐโฑโฑโฑโฑโฑ ๐ซ*'
global.rwait = '๐'
-global.dmoji = '๐คญ'
-global.done = ' โ๏ธ'
+global.dmoji = 'โคต๏ธ'
+global.done = 'โ๏ธ'
global.error = 'โ'
-global.xmoji = '๐'
+global.xmoji = 'โก'
global.multiplier = 69
-global.maxwarn = '3' // mรกxima advertencias
+global.maxwarn = '3'
let file = fileURLToPath(import.meta.url)
watchFile(file, () => {
unwatchFile(file)
console.log(chalk.redBright("Update 'config.js'"))
import(`${file}?update=${Date.now()}`)
-})
\ No newline at end of file
+})
diff --git a/docker-compose.yml b/docker-compose.yml
index 8d4f5058..95232e93 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,4 +1,4 @@
-version: "3.9"
+ version: "3.9"
services:
worker:
build: .
diff --git a/handler.js b/handler.js
index 79266248..a20acc8f 100644
--- a/handler.js
+++ b/handler.js
@@ -1,759 +1,784 @@
-import {
- smsg
-} from "./lib/simple.js"
-import {
- format
-} from "util"
-import {
- fileURLToPath
-} from "url"
-import path, {
- join
-} from "path"
-import {
- unwatchFile,
- watchFile,
- readFileSync
-} from "fs"
-import chalk from "chalk"
-import fetch from "node-fetch"
-
-import {
- WelcomeLeave
-} from "./lib/welcome.js"
+import { smsg } from './lib/simple.js'
+import { format } from 'util'
+import { fileURLToPath } from 'url'
+import path, { join } from 'path'
+import { unwatchFile, watchFile } from 'fs'
+import chalk from 'chalk'
+import fetch from 'node-fetch'
+import Pino from 'pino'
+
/**
* @type {import("@whiskeysockets/baileys")}
*/
-const isNumber = x => typeof x === "number" && !isNaN(x)
-const delay = ms => isNumber(ms) && new Promise(resolve => setTimeout(function() {
- clearTimeout(this)
- resolve()
-}, ms))
+const isNumber = x => typeof x === 'number' && !isNaN(x)
+const delay = ms =>
+ isNumber(ms) &&
+ new Promise(resolve =>
+ setTimeout(function () {
+ clearTimeout(this)
+ resolve()
+ }, ms)
+ )
/**
* Handle messages upsert
- * @param {import("@whiskeysockets/baileys").BaileysEventMap["messages.upsert"]} groupsUpdate
+ * @param {import("@whiskeysockets/baileys").BaileysEventMap["messages.upsert"]} groupsUpdate
*/
-const {
- getAggregateVotesInPollMessage,
- makeInMemoryStore
-} = await (await import('@whiskeysockets/baileys')).default;
-import Pino from "pino"
+const { getAggregateVotesInPollMessage, makeInMemoryStore } = await (
+ await import('@whiskeysockets/baileys')
+).default
const store = makeInMemoryStore({
- logger: Pino().child({
- level: 'fatal',
- stream: 'store'
- })
+ logger: Pino().child({
+ level: 'fatal',
+ stream: 'store',
+ }),
})
export async function handler(chatUpdate) {
- this.msgqueque = this.msgqueque || []
- if (!chatUpdate)
- return
- this.pushMessage(chatUpdate.messages).catch(console.error)
- let m = chatUpdate.messages[chatUpdate.messages.length - 1]
- if (!m)
- return
- if (global.db.data == null)
- await global.loadDatabase()
+ this.msgqueque = this.msgqueque || []
+ if (!chatUpdate) return
+ this.pushMessage(chatUpdate.messages).catch(console.error)
+ let m = chatUpdate.messages[chatUpdate.messages.length - 1]
+ if (!m) return
+ if (global.db.data == null) await global.loadDatabase()
+ try {
+ m = smsg(this, m) || m
+ if (!m) return
+ m.exp = 0
+ m.credit = false
+ m.bank = false
+ m.chicken = false
try {
- m = smsg(this, m) || m
- if (!m)
- return
- m.exp = 0
- m.credit = false
- m.bank = false
- m.chicken = false
+ // TODO: use loop to insert data instead of this
+ let user = global.db.data.users[m.sender]
+ if (typeof user !== 'object') global.db.data.users[m.sender] = {}
+ if (user) {
+ if (!isNumber(user.exp)) user.exp = 0
+ if (!isNumber(user.credit)) user.credit = 10
+ if (!isNumber(user.bank)) user.bank = 0
+ if (!isNumber(user.chicken)) user.chicken = 0
+ if (!isNumber(user.lastclaim)) user.lastclaim = 0
+ if (!('registered' in user)) user.registered = false
+ //-- user registered
+ if (!user.registered) {
+ if (!('name' in user)) user.name = m.name
+ if (!isNumber(user.age)) user.age = -1
+ if (!isNumber(user.regTime)) user.regTime = -1
+ }
+ //--user number
+ if (!isNumber(user.afk)) user.afk = -1
+ if (!('afkReason' in user)) user.afkReason = ''
+ if (!('banned' in user)) user.banned = false
+ if (!isNumber(user.warn)) user.warn = 0
+ if (!isNumber(user.level)) user.level = 0
+ if (!('role' in user)) user.role = 'Tadpole'
+ if (!('autolevelup' in user)) user.autolevelup = false
+ } else {
+ global.db.data.users[m.sender] = {
+ exp: 0,
+ credit: 0,
+ bank: 0,
+ chicken: 0,
+ lastclaim: 0,
+ registered: false,
+ name: m.name,
+ age: -1,
+ regTime: -1,
+ afk: -1,
+ afkReason: '',
+ banned: false,
+ warn: 0,
+ level: 0,
+ role: 'Tadpole',
+ autolevelup: false,
+ }
+ }
+ let chat = global.db.data.chats[m.chat]
+ if (typeof chat !== 'object') global.db.data.chats[m.chat] = {}
+ if (chat) {
+ if (!('antiDelete' in chat)) chat.antiDelete = true
+ if (!('antiLink' in chat)) chat.antiLink = false
+ if (!('antiSticker' in chat)) chat.antiSticker = false
+ if (!('antiToxic' in chat)) chat.antiToxic = false
+ if (!('detect' in chat)) chat.detect = false
+ if (!('getmsg' in chat)) chat.getmsg = true
+ if (!('isBanned' in chat)) chat.isBanned = false
+ if (!('nsfw' in chat)) chat.nsfw = false
+ if (!('sBye' in chat)) chat.sBye = ''
+ if (!('sDemote' in chat)) chat.sDemote = ''
+ if (!('simi' in chat)) chat.simi = false
+ if (!('sPromote' in chat)) chat.sPromote = ''
+ if (!('sWelcome' in chat)) chat.sWelcome = ''
+ if (!('useDocument' in chat)) chat.useDocument = false
+ if (!('viewOnce' in chat)) chat.viewOnce = false
+ if (!('viewStory' in chat)) chat.viewStory = false
+ if (!('welcome' in chat)) chat.welcome = false
+ if (!('chatbot' in chat)) chat.chatbot = false
+ if (!isNumber(chat.expired)) chat.expired = 0
+ } else
+ global.db.data.chats[m.chat] = {
+ antiDelete: true,
+ antiLink: false,
+ antiSticker: false,
+ antiToxic: false,
+ detect: false,
+ expired: 0,
+ getmsg: true,
+ isBanned: false,
+ nsfw: false,
+ sBye: '',
+ sDemote: '',
+ simi: false,
+ sPromote: '',
+ sticker: false,
+ sWelcome: '',
+ useDocument: false,
+ viewOnce: false,
+ viewStory: false,
+ welcome: false,
+ chatbot: false,
+ }
+
+ let settings = global.db.data.settings[this.user.jid]
+ if (typeof settings !== 'object') global.db.data.settings[this.user.jid] = {}
+ if (settings) {
+ if (!('self' in settings)) settings.self = false
+ if (!('autoread' in settings)) settings.autoread = false
+ if (!('restrict' in settings)) settings.restrict = false
+ if (!('restartDB' in settings)) settings.restartDB = 0
+ if (!('status' in settings)) settings.status = 0
+ } else
+ global.db.data.settings[this.user.jid] = {
+ self: false,
+ autoread: false,
+ restrict: false,
+ restartDB: 0,
+ status: 0,
+ }
+ } catch (e) {
+ console.error(e)
+ }
+ if (opts['nyimak']) return
+ if (opts['pconly'] && m.chat.endsWith('g.us')) return
+ if (opts['gconly'] && !m.chat.endsWith('g.us')) return
+ if (opts['swonly'] && m.chat !== 'status@broadcast') return
+ if (typeof m.text !== 'string') m.text = ''
+
+ const isROwner = [
+ conn.decodeJid(global.conn.user.id),
+ ...global.owner.map(([number]) => number),
+ ]
+ .map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net')
+ .includes(m.sender)
+ const isOwner = isROwner || m.fromMe
+ const isMods =
+ isOwner ||
+ global.mods.map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').includes(m.sender)
+ const isPrems =
+ isROwner ||
+ global.prems.map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').includes(m.sender)
+
+ if (opts['queque'] && m.text && !(isMods || isPrems)) {
+ let queque = this.msgqueque,
+ time = 1000 * 5
+ const previousID = queque[queque.length - 1]
+ queque.push(m.id || m.key.id)
+ setInterval(async function () {
+ if (queque.indexOf(previousID) === -1) clearInterval(this)
+ await delay(time)
+ }, time)
+ }
+ if (process.env.MODE && process.env.MODE.toLowerCase() === 'private' && !(isROwner || isOwner))
+ return
+
+ if (m.isBaileys) return
+ m.exp += Math.ceil(Math.random() * 10)
+
+ let usedPrefix
+ let _user = global.db.data && global.db.data.users && global.db.data.users[m.sender]
+
+ const groupMetadata =
+ (m.isGroup
+ ? (conn.chats[m.chat] || {}).metadata || (await this.groupMetadata(m.chat).catch(_ => null))
+ : {}) || {}
+ const participants = (m.isGroup ? groupMetadata.participants : []) || []
+ const user = (m.isGroup ? participants.find(u => conn.decodeJid(u.id) === m.sender) : {}) || {} // User Data
+ const bot =
+ (m.isGroup ? participants.find(u => conn.decodeJid(u.id) == conn.user.jid) : {}) || {} // Your Data
+ const isRAdmin = user?.admin == 'superadmin' || false
+ const isAdmin = isRAdmin || user?.admin == 'admin' || false // Is User Admin?
+ const isBotAdmin = bot?.admin || false // Are you Admin?
+
+ const ___dirname = path.join(path.dirname(fileURLToPath(import.meta.url)), './plugins')
+ for (let name in global.plugins) {
+ let plugin = global.plugins[name]
+ if (!plugin) continue
+ if (plugin.disabled) continue
+ const __filename = join(___dirname, name)
+ if (typeof plugin.all === 'function') {
try {
- // TODO: use loop to insert data instead of this
- let user = global.db.data.users[m.sender]
- if (typeof user !== "object")
- global.db.data.users[m.sender] = {}
- if (user) {
- if (!isNumber(user.exp))
- user.exp = 0
- if (!isNumber(user.credit))
- user.credit = 10
- if (!isNumber(user.bank))
- user.bank = 0
- if (!isNumber(user.chicken))
- user.chicken = 0
- if (!isNumber(user.lastclaim))
- user.lastclaim = 0
- if (!('registered' in user))
- user.registered = false
- //-- user registered
- if (!user.registered) {
- if (!('name' in user))
- user.name = m.name
- if (!isNumber(user.age))
- user.age = -1
- if (!isNumber(user.regTime))
- user.regTime = -1
- }
- //--user number
- if (!isNumber(user.afk))
- user.afk = -1
- if (!('afkReason' in user))
- user.afkReason = ''
- if (!('banned' in user))
- user.banned = false
- if (!isNumber(user.warn))
- user.warn = 0
- if (!isNumber(user.level))
- user.level = 0
- if (!('role' in user))
- user.role = 'Tadpole'
- if (!('autolevelup' in user))
- user.autolevelup = false
- } else {
- global.db.data.users[m.sender] = {
- exp: 0,
- credit: 0,
- bank: 0,
- chicken: 0,
- lastclaim: 0,
- registered: false,
- name: m.name,
- age: -1,
- regTime: -1,
- afk: -1,
- afkReason: '',
- banned: false,
- warn: 0,
- level: 0,
- role: 'Tadpole',
- autolevelup: false,
-
- }
- }
- let chat = global.db.data.chats[m.chat]
- if (typeof chat !== "object")
- global.db.data.chats[m.chat] = {}
- if (chat) {
- if (!("antiDelete" in chat)) chat.antiDelete = true
- if (!("antiLink" in chat)) chat.antiLink = false
- if (!("antiSticker" in chat)) chat.antiSticker = false
- if (!("antiToxic" in chat)) chat.antiToxic = false
- if (!("detect" in chat)) chat.detect = false
- if (!("getmsg" in chat)) chat.getmsg = true
- if (!("isBanned" in chat)) chat.isBanned = false
- if (!("nsfw" in chat)) chat.nsfw = false
- if (!("sBye" in chat)) chat.sBye = ""
- if (!("sDemote" in chat)) chat.sDemote = ""
- if (!("simi" in chat)) chat.simi = false
- if (!("sPromote" in chat)) chat.sPromote = ""
- if (!("sWelcome" in chat)) chat.sWelcome = ""
- if (!("useDocument" in chat)) chat.useDocument = false
- if (!("viewOnce" in chat)) chat.viewOnce = false
- if (!("viewStory" in chat)) chat.viewStory = false
- if (!("welcome" in chat)) chat.welcome = false
- if (!("chatbot" in chat)) chat.chatbot = false
- if (!isNumber(chat.expired)) chat.expired = 0
- } else
- global.db.data.chats[m.chat] = {
- antiDelete: true,
- antiLink: false,
- antiSticker: false,
- antiToxic: false,
- detect: false,
- expired: 0,
- getmsg: true,
- isBanned: false,
- nsfw: false,
- sBye: "",
- sDemote: "",
- simi: false,
- sPromote: "",
- sticker: false,
- sWelcome: "",
- useDocument: false,
- viewOnce: false,
- viewStory: false,
- welcome: false,
- chatbot: false
- }
-
-
- let settings = global.db.data.settings[this.user.jid]
- if (typeof settings !== "object") global.db.data.settings[this.user.jid] = {}
- if (settings) {
- if (!("self" in settings)) settings.self = false
- if (!("autoread" in settings)) settings.autoread = false
- if (!("restrict" in settings)) settings.restrict = false
- if (!("restartDB" in settings)) settings.restartDB = 0
- if (!("status" in settings)) settings.status = 0
-
- } else global.db.data.settings[this.user.jid] = {
- self: false,
- autoread: false,
- restrict: false,
- restartDB: 0,
- status: 0
- }
+ await plugin.all.call(this, m, {
+ chatUpdate,
+ __dirname: ___dirname,
+ __filename,
+ })
} catch (e) {
- console.error(e)
+ // if (typeof e === "string") continue
+ console.error(e)
+ for (let [jid] of global.owner.filter(
+ ([number, _, isDeveloper]) => isDeveloper && number
+ )) {
+ let data = (await conn.onWhatsApp(jid))[0] || {}
+ if (data.exists)
+ m.reply(
+ `*๐๏ธ Plugin:* ${name}\n*๐ค Sender:* ${m.sender}\n*๐ฌ Chat:* ${m.chat}\n*๐ป Command:* ${m.text}\n\n\${format(e)}`.trim(),
+ data.jid
+ )
+ }
}
- if (opts["nyimak"])
- return
- if (opts["pconly"] && m.chat.endsWith("g.us"))
- return
- if (opts["gconly"] && !m.chat.endsWith("g.us"))
- return
- if (opts["swonly"] && m.chat !== "status@broadcast")
- return
- if (typeof m.text !== "string")
- m.text = ""
-
- const isROwner = [conn.decodeJid(global.conn.user.id), ...global.owner.map(([number]) => number)].map(v => v.replace(/[^0-9]/g, "") + "@s.whatsapp.net").includes(m.sender)
- const isOwner = isROwner || m.fromMe
- const isMods = isOwner || global.mods.map(v => v.replace(/[^0-9]/g, "") + "@s.whatsapp.net").includes(m.sender)
- const isPrems = isROwner || global.prems.map(v => v.replace(/[^0-9]/g, "") + "@s.whatsapp.net").includes(m.sender)
-
- if (opts["queque"] && m.text && !(isMods || isPrems)) {
- let queque = this.msgqueque,
- time = 1000 * 5
- const previousID = queque[queque.length - 1]
- queque.push(m.id || m.key.id)
- setInterval(async function() {
- if (queque.indexOf(previousID) === -1) clearInterval(this)
- await delay(time)
- }, time)
+ }
+ if (!opts['restrict'])
+ if (plugin.tags && plugin.tags.includes('admin')) {
+ // global.dfail("restrict", m, this)
+ continue
}
- if (process.env.MODE && process.env.MODE.toLowerCase() === 'private' && !(isROwner || isOwner))
- return;
-
-
- if (m.isBaileys)
- return
- m.exp += Math.ceil(Math.random() * 10)
-
- let usedPrefix
- let _user = global.db.data && global.db.data.users && global.db.data.users[m.sender]
-
- const groupMetadata = (m.isGroup ? ((conn.chats[m.chat] || {}).metadata || await this.groupMetadata(m.chat).catch(_ => null)) : {}) || {}
- const participants = (m.isGroup ? groupMetadata.participants : []) || []
- const user = (m.isGroup ? participants.find(u => conn.decodeJid(u.id) === m.sender) : {}) || {} // User Data
- const bot = (m.isGroup ? participants.find(u => conn.decodeJid(u.id) == conn.user.jid) : {}) || {} // Your Data
- const isRAdmin = user?.admin == "superadmin" || false
- const isAdmin = isRAdmin || user?.admin == "admin" || false // Is User Admin?
- const isBotAdmin = bot?.admin || false // Are you Admin?
-
- const ___dirname = path.join(path.dirname(fileURLToPath(import.meta.url)), "./plugins")
- for (let name in global.plugins) {
- let plugin = global.plugins[name]
- if (!plugin)
- continue
- if (plugin.disabled)
- continue
- const __filename = join(___dirname, name)
- if (typeof plugin.all === "function") {
- try {
- await plugin.all.call(this, m, {
- chatUpdate,
- __dirname: ___dirname,
- __filename
- })
- } catch (e) {
- // if (typeof e === "string") continue
- console.error(e)
- for (let [jid] of global.owner.filter(([number, _, isDeveloper]) => isDeveloper && number)) {
- let data = (await conn.onWhatsApp(jid))[0] || {}
- if (data.exists)
- m.reply(`*๐๏ธ Plugin:* ${name}\n*๐ค Sender:* ${m.sender}\n*๐ฌ Chat:* ${m.chat}\n*๐ป Command:* ${m.text}\n\n\${format(e)}`.trim(), data.jid)
- }
- }
- }
- if (!opts["restrict"])
- if (plugin.tags && plugin.tags.includes("admin")) {
- // global.dfail("restrict", m, this)
- continue
- }
- const str2Regex = str => str.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&")
- let _prefix = plugin.customPrefix ? plugin.customPrefix : conn.prefix ? conn.prefix : global.prefix
- let match = (_prefix instanceof RegExp ? // RegExp Mode?
- [
- [_prefix.exec(m.text), _prefix]
- ] :
- Array.isArray(_prefix) ? // Array?
- _prefix.map(p => {
- let re = p instanceof RegExp ? // RegExp in Array?
- p :
- new RegExp(str2Regex(p))
- return [re.exec(m.text), re]
- }) :
- typeof _prefix === "string" ? // String?
- [
- [new RegExp(str2Regex(_prefix)).exec(m.text), new RegExp(str2Regex(_prefix))]
- ] : [
- [
- [], new RegExp
- ]
- ]
- ).find(p => p[1])
- if (typeof plugin.before === "function") {
- if (await plugin.before.call(this, m, {
- match,
- conn: this,
- participants,
- groupMetadata,
- user,
- bot,
- isROwner,
- isOwner,
- isRAdmin,
- isAdmin,
- isBotAdmin,
- isPrems,
- chatUpdate,
- __dirname: ___dirname,
- __filename
- }))
- continue
- }
- if (typeof plugin !== "function")
- continue
- if ((usedPrefix = (match[0] || "")[0])) {
- let noPrefix = m.text.replace(usedPrefix, "")
- let [command, ...args] = noPrefix.trim().split` `.filter(v => v)
- args = args || []
- let _args = noPrefix.trim().split` `.slice(1)
- let text = _args.join` `
- command = (command || "").toLowerCase()
- let fail = plugin.fail || global.dfail // When failed
- let isAccept = plugin.command instanceof RegExp ? // RegExp Mode?
- plugin.command.test(command) :
- Array.isArray(plugin.command) ? // Array?
- plugin.command.some(cmd => cmd instanceof RegExp ? // RegExp in Array?
- cmd.test(command) :
- cmd === command
- ) :
- typeof plugin.command === "string" ? // String?
- plugin.command === command :
- false
-
- if (!isAccept)
- continue
- m.plugin = name
- if (m.chat in global.db.data.chats || m.sender in global.db.data.users) {
- let chat = global.db.data.chats[m.chat]
- let user = global.db.data.users[m.sender]
- if (name != "owner-unbanchat.js" && chat?.isBanned)
- return // Except this
- if (name != "owner-unbanuser.js" && user?.banned)
- return
- }
- if (plugin.rowner && plugin.owner && !(isROwner || isOwner)) { // Both Owner
- fail("owner", m, this)
- continue
- }
- if (plugin.rowner && !isROwner) { // Real Owner
- fail("rowner", m, this)
- continue
- }
- if (plugin.owner && !isOwner) { // Number Owner
- fail("owner", m, this)
- continue
- }
- if (plugin.mods && !isMods) { // Moderator
- fail("mods", m, this)
- continue
- }
- if (plugin.premium && !isPrems) { // Premium
- fail("premium", m, this)
- continue
- }
- if (plugin.group && !m.isGroup) { // Group Only
- fail("group", m, this)
- continue
- } else if (plugin.botAdmin && !isBotAdmin) { // You Admin
- fail("botAdmin", m, this)
- continue
- } else if (plugin.admin && !isAdmin) { // User Admin
- fail("admin", m, this)
- continue
- }
- if (plugin.private && m.isGroup) { // Private Chat Only
- fail("private", m, this)
- continue
- }
- if (plugin.register == true && _user.registered == false) { // Butuh daftar?
- fail("unreg", m, this)
- continue
- }
- m.isCommand = true
- let xp = 'exp' in plugin ? parseInt(plugin.exp) : 17 // XP Earning per command
- if (xp > 200)
- m.reply('cheater')
- else
- m.exp += xp
- if (!isPrems && plugin.credit && global.db.data.users[m.sender].credit < plugin.credit * 1) {
- this.reply(m.chat, `๐ฅ You don't have enough gold`, m)
- continue // Gold finished
- }
- if (plugin.level > _user.level) {
- this.reply(m.chat, `๐ฅ Level required ${plugin.level} to use this command. \nYour level ${_user.level}`, m)
- continue // If the level has not been reached
- }
- let extra = {
- match,
- usedPrefix,
- noPrefix,
- _args,
- args,
- command,
- text,
- conn: this,
- participants,
- groupMetadata,
- user,
- bot,
- isROwner,
- isOwner,
- isRAdmin,
- isAdmin,
- isBotAdmin,
- isPrems,
- chatUpdate,
- __dirname: ___dirname,
- __filename
- }
- try {
- await plugin.call(this, m, extra)
- if (!isPrems)
- m.credit = m.credit || plugin.credit || false
- } catch (e) {
- // Error occured
- m.error = e
- console.error(e)
- if (e) {
- let text = format(e)
- for (let key of Object.values(global.APIKeys))
- text = text.replace(new RegExp(key, "g"), "#HIDDEN#")
- if (e.name)
- for (let [jid] of global.owner.filter(([number, _, isDeveloper]) => isDeveloper && number)) {
- let data = (await this.onWhatsApp(jid))[0] || {}
- if (data.exists)
- return m.reply(`*๐๏ธ Plugin:* ${m.plugin}\n*๐ค Sender:* ${m.sender}\n*๐ฌ Chat:* ${m.chat}\n*๐ป Command:* ${usedPrefix}${command} ${args.join(" ")}\n๐ *Error Logs:*\n\n${text}`.trim(), data.jid)
- }
- m.reply(text)
- }
- } finally {
- // m.reply(util.format(_user))
- if (typeof plugin.after === "function") {
- try {
- await plugin.after.call(this, m, extra)
- } catch (e) {
- console.error(e)
- }
- }
- if (m.credit)
- m.reply(`You used *${+m.credit}*`)
- }
- break
- }
+ const str2Regex = str => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
+ let _prefix = plugin.customPrefix
+ ? plugin.customPrefix
+ : conn.prefix
+ ? conn.prefix
+ : global.prefix
+ let match = (
+ _prefix instanceof RegExp // RegExp Mode?
+ ? [[_prefix.exec(m.text), _prefix]]
+ : Array.isArray(_prefix) // Array?
+ ? _prefix.map(p => {
+ let re =
+ p instanceof RegExp // RegExp in Array?
+ ? p
+ : new RegExp(str2Regex(p))
+ return [re.exec(m.text), re]
+ })
+ : typeof _prefix === 'string' // String?
+ ? [[new RegExp(str2Regex(_prefix)).exec(m.text), new RegExp(str2Regex(_prefix))]]
+ : [[[], new RegExp()]]
+ ).find(p => p[1])
+ if (typeof plugin.before === 'function') {
+ if (
+ await plugin.before.call(this, m, {
+ match,
+ conn: this,
+ participants,
+ groupMetadata,
+ user,
+ bot,
+ isROwner,
+ isOwner,
+ isRAdmin,
+ isAdmin,
+ isBotAdmin,
+ isPrems,
+ chatUpdate,
+ __dirname: ___dirname,
+ __filename,
+ })
+ )
+ continue
+ }
+ if (typeof plugin !== 'function') continue
+ if ((usedPrefix = (match[0] || '')[0])) {
+ let noPrefix = m.text.replace(usedPrefix, '')
+ let [command, ...args] = noPrefix.trim().split` `.filter(v => v)
+ args = args || []
+ let _args = noPrefix.trim().split` `.slice(1)
+ let text = _args.join` `
+ command = (command || '').toLowerCase()
+ let fail = plugin.fail || global.dfail // When failed
+ let isAccept =
+ plugin.command instanceof RegExp // RegExp Mode?
+ ? plugin.command.test(command)
+ : Array.isArray(plugin.command) // Array?
+ ? plugin.command.some(cmd =>
+ cmd instanceof RegExp // RegExp in Array?
+ ? cmd.test(command)
+ : cmd === command
+ )
+ : typeof plugin.command === 'string' // String?
+ ? plugin.command === command
+ : false
+
+ if (!isAccept) continue
+ m.plugin = name
+ if (m.chat in global.db.data.chats || m.sender in global.db.data.users) {
+ let chat = global.db.data.chats[m.chat]
+ let user = global.db.data.users[m.sender]
+ if (name != 'owner-unbanchat.js' && chat?.isBanned) return // Except this
+ if (name != 'owner-unbanuser.js' && user?.banned) return
}
- } catch (e) {
- console.error(e)
- } finally {
- if (opts["queque"] && m.text) {
- const quequeIndex = this.msgqueque.indexOf(m.id || m.key.id)
- if (quequeIndex !== -1)
- this.msgqueque.splice(quequeIndex, 1)
+ if (plugin.rowner && plugin.owner && !(isROwner || isOwner)) {
+ // Both Owner
+ fail('owner', m, this)
+ continue
}
- //console.log(global.db.data.users[m.sender])
- let user, stats = global.db.data.stats
- if (m) {
- if (m.sender && (user = global.db.data.users[m.sender])) {
- user.exp += m.exp
- user.credit -= m.credit * 1
- user.bank -= m.bank
- user.chicken -= m.chicken
- }
-
- let stat
- if (m.plugin) {
- let now = +new Date
- if (m.plugin in stats) {
- stat = stats[m.plugin]
- if (!isNumber(stat.total))
- stat.total = 1
- if (!isNumber(stat.success))
- stat.success = m.error != null ? 0 : 1
- if (!isNumber(stat.last))
- stat.last = now
- if (!isNumber(stat.lastSuccess))
- stat.lastSuccess = m.error != null ? 0 : now
- } else
- stat = stats[m.plugin] = {
- total: 1,
- success: m.error != null ? 0 : 1,
- last: now,
- lastSuccess: m.error != null ? 0 : now
- }
- stat.total += 1
- stat.last = now
- if (m.error == null) {
- stat.success += 1
- stat.lastSuccess = now
- }
- }
+ if (plugin.rowner && !isROwner) {
+ // Real Owner
+ fail('rowner', m, this)
+ continue
+ }
+ if (plugin.owner && !isOwner) {
+ // Number Owner
+ fail('owner', m, this)
+ continue
+ }
+ if (plugin.mods && !isMods) {
+ // Moderator
+ fail('mods', m, this)
+ continue
+ }
+ if (plugin.premium && !isPrems) {
+ // Premium
+ fail('premium', m, this)
+ continue
+ }
+ if (plugin.group && !m.isGroup) {
+ // Group Only
+ fail('group', m, this)
+ continue
+ } else if (plugin.botAdmin && !isBotAdmin) {
+ // You Admin
+ fail('botAdmin', m, this)
+ continue
+ } else if (plugin.admin && !isAdmin) {
+ // User Admin
+ fail('admin', m, this)
+ continue
+ }
+ if (plugin.private && m.isGroup) {
+ // Private Chat Only
+ fail('private', m, this)
+ continue
+ }
+ if (plugin.register == true && _user.registered == false) {
+ // Butuh daftar?
+ fail('unreg', m, this)
+ continue
+ }
+ m.isCommand = true
+ let xp = 'exp' in plugin ? parseInt(plugin.exp) : 17 // XP Earning per command
+ if (xp > 200) m.reply('cheater')
+ else m.exp += xp
+ if (
+ !isPrems &&
+ plugin.credit &&
+ global.db.data.users[m.sender].credit < plugin.credit * 1
+ ) {
+ this.reply(m.chat, `๐ฅ You don't have enough gold`, m)
+ continue // Gold finished
+ }
+ if (plugin.level > _user.level) {
+ this.reply(
+ m.chat,
+ `๐ฅ Level required ${plugin.level} to use this command. \nYour level ${_user.level}`,
+ m
+ )
+ continue // If the level has not been reached
+ }
+ let extra = {
+ match,
+ usedPrefix,
+ noPrefix,
+ _args,
+ args,
+ command,
+ text,
+ conn: this,
+ participants,
+ groupMetadata,
+ user,
+ bot,
+ isROwner,
+ isOwner,
+ isRAdmin,
+ isAdmin,
+ isBotAdmin,
+ isPrems,
+ chatUpdate,
+ __dirname: ___dirname,
+ __filename,
}
-
try {
- if (!opts["noprint"]) await (await import("./lib/print.js")).default(m, this)
+ await plugin.call(this, m, extra)
+ if (!isPrems) m.credit = m.credit || plugin.credit || false
} catch (e) {
- console.log(m, m.quoted, e)
+ // Error occured
+ m.error = e
+ console.error(e)
+ if (e) {
+ let text = format(e)
+ for (let key of Object.values(global.APIKeys))
+ text = text.replace(new RegExp(key, 'g'), '#HIDDEN#')
+ if (e.name)
+ for (let [jid] of global.owner.filter(
+ ([number, _, isDeveloper]) => isDeveloper && number
+ )) {
+ let data = (await this.onWhatsApp(jid))[0] || {}
+ if (data.exists)
+ return m.reply(
+ `*๐๏ธ Plugin:* ${m.plugin}\n*๐ค Sender:* ${m.sender}\n*๐ฌ Chat:* ${m.chat}\n*๐ป Command:* ${usedPrefix}${command} ${args.join(' ')}\n๐ *Error Logs:*\n\n${text}`.trim(),
+ data.jid
+ )
+ }
+ m.reply(text)
+ }
+ } finally {
+ // m.reply(util.format(_user))
+ if (typeof plugin.after === 'function') {
+ try {
+ await plugin.after.call(this, m, extra)
+ } catch (e) {
+ console.error(e)
+ }
+ }
+ if (m.credit) m.reply(`You used *${+m.credit}*`)
}
- if (process.env.autoRead)
- await conn.readMessages([m.key])
- if (process.env.statusview && m.key.remoteJid === 'status@broadcast')
- await conn.readMessages([m.key])
+ break
+ }
+ }
+ } catch (e) {
+ console.error(e)
+ } finally {
+ if (opts['queque'] && m.text) {
+ const quequeIndex = this.msgqueque.indexOf(m.id || m.key.id)
+ if (quequeIndex !== -1) this.msgqueque.splice(quequeIndex, 1)
+ }
+ //console.log(global.db.data.users[m.sender])
+ let user,
+ stats = global.db.data.stats
+ if (m) {
+ if (m.sender && (user = global.db.data.users[m.sender])) {
+ user.exp += m.exp
+ user.credit -= m.credit * 1
+ user.bank -= m.bank
+ user.chicken -= m.chicken
+ }
+
+ let stat
+ if (m.plugin) {
+ let now = +new Date()
+ if (m.plugin in stats) {
+ stat = stats[m.plugin]
+ if (!isNumber(stat.total)) stat.total = 1
+ if (!isNumber(stat.success)) stat.success = m.error != null ? 0 : 1
+ if (!isNumber(stat.last)) stat.last = now
+ if (!isNumber(stat.lastSuccess)) stat.lastSuccess = m.error != null ? 0 : now
+ } else
+ stat = stats[m.plugin] = {
+ total: 1,
+ success: m.error != null ? 0 : 1,
+ last: now,
+ lastSuccess: m.error != null ? 0 : now,
+ }
+ stat.total += 1
+ stat.last = now
+ if (m.error == null) {
+ stat.success += 1
+ stat.lastSuccess = now
+ }
+ }
+ }
+
+ try {
+ if (!opts['noprint']) await (await import('./lib/print.js')).default(m, this)
+ } catch (e) {
+ console.log(m, m.quoted, e)
}
+ if (process.env.autoRead) await conn.readMessages([m.key])
+ if (process.env.statusview && m.key.remoteJid === 'status@broadcast')
+ await conn.readMessages([m.key])
+ }
}
/**
* Handle groups participants update
- * @param {import("@whiskeysockets/baileys").BaileysEventMap["group-participants.update"]} groupsUpdate
+ * @param {import("@whiskeysockets/baileys").BaileysEventMap["group-participants.update"]} groupsUpdate
*/
-export async function participantsUpdate({
- id,
- participants,
- action
-}) {
- if (opts["self"] || this.isInit) return;
- if (global.db.data == null) await loadDatabase();
- const chat = global.db.data.chats[id] || {};
- const emoji = {
- promote: '๐ค๐',
- demote: '๐ค๐
โโ๏ธ',
- welcome: '๐',
- bye: '๐',
- bug: '๐',
- mail: '๐ฎ',
- owner: '๐'
- };
-
-
-
- switch (action) {
- case 'add':
- if (chat.welcome) {
- let groupMetadata = await this.groupMetadata(id) || (conn.chats[id] || {}).metadata;
- for (let user of participants) {
- let pp, ppgp;
- try {
- pp = await this.profilePictureUrl(user, 'image');
- ppgp = await this.profilePictureUrl(id, 'image');
- } catch (error) {
- console.error(`Error retrieving profile picture: ${error}`);
- pp = 'https://i.imgur.com/8B4jwGq.jpeg'; // Assign default image URL
- ppgp = 'https://i.imgur.com/8B4jwGq.jpeg'; // Assign default image URL
- } finally {
- let text = (chat.sWelcome || this.welcome || conn.welcome || 'Welcome, @user')
- .replace('@group', await this.getName(id))
- .replace('@desc', groupMetadata.desc?.toString() || 'error')
- .replace('@user', '@' + user.split('@')[0]);
-
- let nthMember = groupMetadata.participants.length;
- let secondText = `Welcome, ${await this.getName(user)}, our ${nthMember}th member`;
-
- let welcomeApiUrl = `https://wecomeapi.onrender.com/welcome-image?username=${encodeURIComponent(
- await this.getName(user)
- )}&guildName=${encodeURIComponent(await this.getName(id))}&guildIcon=${encodeURIComponent(
- ppgp
- )}&memberCount=${encodeURIComponent(
- nthMember.toString()
- )}&avatar=${encodeURIComponent(pp)}&background=${encodeURIComponent(
- 'https://cdn.wallpapersafari.com/71/19/7ZfcpT.png'
- )}`;
-
- try {
- let welcomeResponse = await fetch(welcomeApiUrl);
- let welcomeBuffer = await welcomeResponse.buffer();
-
- this.sendMessage(id, {
- text: text,
- contextInfo: {
- mentionedJid: [user],
- externalAdReply: {
- title: "XLICON-V2",
- body: "welcome to our Group",
- thumbnailUrl: welcomeApiUrl,
- sourceUrl: 'https://chat.whatsapp.com/C4ivwZKuh5bLJkqfYNPQsk',
- mediaType: 1,
- renderLargerThumbnail: true
- }}})
- } catch (error) {
- console.error(`Error generating welcome image: ${error}`);
- }
- }
- }
+export async function participantsUpdate({ id, participants, action }) {
+ if (opts['self'] || this.isInit) return
+ if (global.db.data == null) await loadDatabase()
+ const chat = global.db.data.chats[id] || {}
+ const emoji = {
+ promote: '๐ค๐',
+ demote: '๐ค๐
โโ๏ธ',
+ welcome: '๐',
+ bye: '๐',
+ bug: '๐',
+ mail: '๐ฎ',
+ owner: '๐',
+ }
+
+ switch (action) {
+ case 'add':
+ if (chat.welcome) {
+ let groupMetadata = (await this.groupMetadata(id)) || (conn.chats[id] || {}).metadata
+ for (let user of participants) {
+ let pp, ppgp
+ try {
+ pp = await this.profilePictureUrl(user, 'image')
+ ppgp = await this.profilePictureUrl(id, 'image')
+ } catch (error) {
+ console.error(`Error retrieving profile picture: ${error}`)
+ pp = 'https://i.imgur.com/8B4jwGq.jpeg' // Assign default image URL
+ ppgp = 'https://i.imgur.com/8B4jwGq.jpeg' // Assign default image URL
+ } finally {
+ let text = (chat.sWelcome || this.welcome || conn.welcome || 'Welcome, @user')
+ .replace('@group', await this.getName(id))
+ .replace('@desc', groupMetadata.desc?.toString() || 'error')
+ .replace('@user', '@' + user.split('@')[0])
+
+ let nthMember = groupMetadata.participants.length
+ let secondText = `Welcome, ${await this.getName(user)}, our ${nthMember}th member`
+
+ let welcomeApiUrl = `https://welcome.guruapi.tech/welcome-image?username=${encodeURIComponent(
+ await this.getName(user)
+ )}&guildName=${encodeURIComponent(await this.getName(id))}&guildIcon=${encodeURIComponent(
+ ppgp
+ )}&memberCount=${encodeURIComponent(
+ nthMember.toString()
+ )}&avatar=${encodeURIComponent(pp)}&background=${encodeURIComponent(
+ 'https://cdn.wallpapersafari.com/71/19/7ZfcpT.png'
+ )}`
+
+ try {
+ let welcomeResponse = await fetch(welcomeApiUrl)
+ let welcomeBuffer = await welcomeResponse.buffer()
+
+ this.sendMessage(id, {
+ text: text,
+ contextInfo: {
+ mentionedJid: [user],
+ externalAdReply: {
+ title: 'แดสแด ษขแดสแด-สแดแด',
+ body: 'welcome to Group',
+ thumbnailUrl: welcomeApiUrl,
+ sourceUrl: 'https://chat.whatsapp.com/F3sB3pR3tClBvVmlIkqDJp',
+ mediaType: 1,
+ renderLargerThumbnail: true,
+ },
+ },
+ })
+ } catch (error) {
+ console.error(`Error generating welcome image: ${error}`)
}
- break;
-
- case 'remove':
- if (chat.welcome) {
- let groupMetadata = await this.groupMetadata(id) || (conn.chats[id] || {}).metadata;
- for (let user of participants) {
- let pp, ppgp;
- try {
- pp = await this.profilePictureUrl(user, 'image');
- ppgp = await this.profilePictureUrl(id, 'image');
- } catch (error) {
- console.error(`Error retrieving profile picture: ${error}`);
- pp = 'https://i.imgur.com/8B4jwGq.jpeg'; // Assign default image URL
- ppgp = 'https://i.imgur.com/8B4jwGq.jpeg'; // Assign default image URL
- } finally {
- let text = (chat.sBye || this.bye || conn.bye || 'HELLO, @user')
- .replace('@user', '@' + user.split('@')[0]);
-
- let nthMember = groupMetadata.participants.length;
- let secondText = `Goodbye, our ${nthMember}th group member`;
-
- let leaveApiUrl = `https://wecomeapi.onrender.com/leave-image?username=${encodeURIComponent(
- await this.getName(user)
- )}&guildName=${encodeURIComponent(await this.getName(id))}&guildIcon=${encodeURIComponent(
- ppgp
- )}&memberCount=${encodeURIComponent(
- nthMember.toString()
- )}&avatar=${encodeURIComponent(pp)}&background=${encodeURIComponent(
- 'https://cdn.wallpapersafari.com/71/19/7ZfcpT.png'
- )}`;
-
- try {
- let leaveResponse = await fetch(leaveApiUrl);
- let leaveBuffer = await leaveResponse.buffer();
-
- this.sendMessage(id, {
- text: text,
- contextInfo: {
- mentionedJid: [user],
- externalAdReply: {
- title: "XLICON-V2 BOT",
- body: "Goodbye from our Group",
- thumbnailUrl: leaveApiUrl,
- sourceUrl: 'https://chat.whatsapp.com/BfH0KLkICn2BjmGFMRcGMW',
- mediaType: 1,
- renderLargerThumbnail: true
- }}})
- } catch (error) {
- console.error(`Error generating leave image: ${error}`);
- }
- }
- }
+ }
+ }
+ }
+ break
+
+ case 'remove':
+ if (chat.welcome) {
+ let groupMetadata = (await this.groupMetadata(id)) || (conn.chats[id] || {}).metadata
+ for (let user of participants) {
+ let pp, ppgp
+ try {
+ pp = await this.profilePictureUrl(user, 'image')
+ ppgp = await this.profilePictureUrl(id, 'image')
+ } catch (error) {
+ console.error(`Error retrieving profile picture: ${error}`)
+ pp = 'https://i.imgur.com/8B4jwGq.jpeg' // Assign default image URL
+ ppgp = 'https://i.imgur.com/8B4jwGq.jpeg' // Assign default image URL
+ } finally {
+ let text = (chat.sBye || this.bye || conn.bye || 'HELLO, @user').replace(
+ '@user',
+ '@' + user.split('@')[0]
+ )
+
+ let nthMember = groupMetadata.participants.length
+ let secondText = `Goodbye, our ${nthMember}th group member`
+
+ let leaveApiUrl = `https://welcome.guruapi.tech/leave-image?username=${encodeURIComponent(
+ await this.getName(user)
+ )}&guildName=${encodeURIComponent(await this.getName(id))}&guildIcon=${encodeURIComponent(
+ ppgp
+ )}&memberCount=${encodeURIComponent(
+ nthMember.toString()
+ )}&avatar=${encodeURIComponent(pp)}&background=${encodeURIComponent(
+ 'https://cdn.wallpapersafari.com/71/19/7ZfcpT.png'
+ )}`
+
+ try {
+ let leaveResponse = await fetch(leaveApiUrl)
+ let leaveBuffer = await leaveResponse.buffer()
+
+ this.sendMessage(id, {
+ text: text,
+ contextInfo: {
+ mentionedJid: [user],
+ externalAdReply: {
+ title: 'แดสแด ษขแดสแด-สแดแด',
+ body: 'Goodbye from Group',
+ thumbnailUrl: leaveApiUrl,
+ sourceUrl: 'https://chat.whatsapp.com/F3sB3pR3tClBvVmlIkqDJp',
+ mediaType: 1,
+ renderLargerThumbnail: true,
+ },
+ },
+ })
+ } catch (error) {
+ console.error(`Error generating leave image: ${error}`)
}
- break;
- case "promote":
- const promoteText = (chat.sPromote || this.spromote || conn.spromote || `${emoji.promote} @user *is now admin*`).replace("@user", "@" + participants[0].split("@")[0]);
- if (chat.detect) {
- this.sendMessage(id, {
- text: promoteText.trim(),
- mentions: [participants[0]]
- });
- }
- break;
- case "demote":
- const demoteText = (chat.sDemote || this.sdemote || conn.sdemote || `${emoji.demote} @user *demoted from admin*`).replace("@user", "@" + participants[0].split("@")[0]);
- if (chat.detect) {
- this.sendMessage(id, {
- text: demoteText.trim(),
- mentions: [participants[0]]
- });
- }
- break;
- }
+ }
+ }
+ }
+ break
+ case 'promote':
+ const promoteText = (
+ chat.sPromote ||
+ this.spromote ||
+ conn.spromote ||
+ `${emoji.promote} @user *is now admin*`
+ ).replace('@user', '@' + participants[0].split('@')[0])
+
+ if (chat.detect) {
+ this.sendMessage(id, {
+ text: promoteText.trim(),
+ mentions: [participants[0]],
+ })
+ }
+ break
+ case 'demote':
+ const demoteText = (
+ chat.sDemote ||
+ this.sdemote ||
+ conn.sdemote ||
+ `${emoji.demote} @user *demoted from admin*`
+ ).replace('@user', '@' + participants[0].split('@')[0])
+
+ if (chat.detect) {
+ this.sendMessage(id, {
+ text: demoteText.trim(),
+ mentions: [participants[0]],
+ })
+ }
+ break
+ }
}
-
/**
* Handle groups update
- * @param {import("@whiskeysockets/baileys").BaileysEventMap["groups.update"]} groupsUpdate
+ * @param {import("@whiskeysockets/baileys").BaileysEventMap["groups.update"]} groupsUpdate
*/
export async function groupsUpdate(groupsUpdate) {
- if (opts["self"]) return
- for (const groupUpdate of groupsUpdate) {
- const id = groupUpdate.id
- if (!id) continue
- let chats = global.db.data.chats[id] || {}
- const emoji = {
- desc: '๐',
- subject: '๐',
- icon: '๐ผ๏ธ',
- revoke: '๐',
- announceOn: '๐',
- announceOff: '๐',
- restrictOn: '๐ซ',
- restrictOff: 'โ
',
- }
-
- let text = ""
- if (!chats.detect) continue
-
- if (groupUpdate.desc) {
- text = (chats.sDesc || this.sDesc || conn.sDesc || `*${emoji.desc} Description has been changed to*\n@desc`)
- .replace("@desc", groupUpdate.desc)
- } else if (groupUpdate.subject) {
- text = (chats.sSubject || this.sSubject || conn.sSubject || `*${emoji.subject} Subject has been changed to*\n@subject`)
- .replace("@subject", groupUpdate.subject)
- } else if (groupUpdate.icon) {
- text = (chats.sIcon || this.sIcon || conn.sIcon || `*${emoji.icon} Icon has been changed*`)
- .replace("@icon", groupUpdate.icon)
- } else if (groupUpdate.revoke) {
- text = (chats.sRevoke || this.sRevoke || conn.sRevoke || `*${emoji.revoke} Group link has been changed to*\n@revoke`)
- .replace("@revoke", groupUpdate.revoke)
- } else if (groupUpdate.announce === true) {
- text = (chats.sAnnounceOn || this.sAnnounceOn || conn.sAnnounceOn || `*${emoji.announceOn} Group is now closed!*`)
- } else if (groupUpdate.announce === false) {
- text = (chats.sAnnounceOff || this.sAnnounceOff || conn.sAnnounceOff || `*${emoji.announceOff} Group is now open!*`)
- } else if (groupUpdate.restrict === true) {
- text = (chats.sRestrictOn || this.sRestrictOn || conn.sRestrictOn || `*${emoji.restrictOn} Group is now restricted to participants only!*`)
- } else if (groupUpdate.restrict === false) {
- text = (chats.sRestrictOff || this.sRestrictOff || conn.sRestrictOff || `*${emoji.restrictOff} Group is now restricted to admins only!*`)
- }
-
+ if (opts['self']) return
+ for (const groupUpdate of groupsUpdate) {
+ const id = groupUpdate.id
+ if (!id) continue
+ let chats = global.db.data.chats[id] || {}
+ const emoji = {
+ desc: '๐',
+ subject: '๐',
+ icon: '๐ผ๏ธ',
+ revoke: '๐',
+ announceOn: '๐',
+ announceOff: '๐',
+ restrictOn: '๐ซ',
+ restrictOff: 'โ
',
+ }
- if (!text) continue
- await this.sendMessage(id, { text, mentions: this.parseMention(text) })
+ let text = ''
+ if (!chats.detect) continue
+
+ if (groupUpdate.desc) {
+ text = (
+ chats.sDesc ||
+ this.sDesc ||
+ conn.sDesc ||
+ `*${emoji.desc} Description has been changed to*\n@desc`
+ ).replace('@desc', groupUpdate.desc)
+ } else if (groupUpdate.subject) {
+ text = (
+ chats.sSubject ||
+ this.sSubject ||
+ conn.sSubject ||
+ `*${emoji.subject} Subject has been changed to*\n@subject`
+ ).replace('@subject', groupUpdate.subject)
+ } else if (groupUpdate.icon) {
+ text = (
+ chats.sIcon ||
+ this.sIcon ||
+ conn.sIcon ||
+ `*${emoji.icon} Icon has been changed*`
+ ).replace('@icon', groupUpdate.icon)
+ } else if (groupUpdate.revoke) {
+ text = (
+ chats.sRevoke ||
+ this.sRevoke ||
+ conn.sRevoke ||
+ `*${emoji.revoke} Group link has been changed to*\n@revoke`
+ ).replace('@revoke', groupUpdate.revoke)
+ } else if (groupUpdate.announce === true) {
+ text =
+ chats.sAnnounceOn ||
+ this.sAnnounceOn ||
+ conn.sAnnounceOn ||
+ `*${emoji.announceOn} Group is now closed!*`
+ } else if (groupUpdate.announce === false) {
+ text =
+ chats.sAnnounceOff ||
+ this.sAnnounceOff ||
+ conn.sAnnounceOff ||
+ `*${emoji.announceOff} Group is now open!*`
+ } else if (groupUpdate.restrict === true) {
+ text =
+ chats.sRestrictOn ||
+ this.sRestrictOn ||
+ conn.sRestrictOn ||
+ `*${emoji.restrictOn} Group is now restricted to participants only!*`
+ } else if (groupUpdate.restrict === false) {
+ text =
+ chats.sRestrictOff ||
+ this.sRestrictOff ||
+ conn.sRestrictOff ||
+ `*${emoji.restrictOff} Group is now restricted to admins only!*`
}
+
+ if (!text) continue
+ await this.sendMessage(id, { text, mentions: this.parseMention(text) })
+ }
}
/**
Delete Chat
*/
export async function deleteUpdate(message) {
- try {
-
-
- if (typeof process.env.antidelete === 'undefined' || process.env.antidelete.toLowerCase() === 'false') return;
-
-
- const {
- fromMe,
- id,
- participant
- } = message
- if (fromMe)
- return
- let msg = this.serializeM(this.loadMessage(id))
- if (!msg)
- return
- let chat = global.db.data.chats[msg.chat] || {}
-
- await this.reply(msg.chat, `
+ try {
+ if (
+ typeof process.env.antidelete === 'undefined' ||
+ process.env.antidelete.toLowerCase() === 'false'
+ )
+ return
+
+ const { fromMe, id, participant } = message
+ if (fromMe) return
+ let msg = this.serializeM(this.loadMessage(id))
+ if (!msg) return
+ let chat = global.db.data.chats[msg.chat] || {}
+
+ await this.reply(
+ conn.user.id,
+ `
โก deleted a message
โโโท ๐ผ๐๐๐ ๐ฟ๐๐๐๐๐
โข *Number :* @${participant.split`@`[0]}
โโโโโโโโโโโโโโ
- TO DEACTIVE , PRESS
- */off antidelete*
- *.enable delete*
- `.trim(), msg, {
- mentions: [participant]
- })
- this.copyNForward(msg.chat, msg, false).catch(e => console.log(e, msg))
- } catch (e) {
- console.error(e)
- }
+ `.trim(),
+ msg,
+ {
+ mentions: [participant],
+ }
+ )
+ this.copyNForward(conn.user.id, msg, false).catch(e => console.log(e, msg))
+ } catch (e) {
+ console.error(e)
+ }
}
/*
@@ -761,105 +786,105 @@ export async function deleteUpdate(message) {
*/
export async function pollUpdate(message) {
for (const { key, update } of message) {
- if (message.pollUpdates) {
- const pollCreation = await this.serializeM(this.loadMessage(key.id))
- if (pollCreation) {
- const pollMessage = await getAggregateVotesInPollMessage({
- message: pollCreation.message,
- pollUpdates: pollCreation.pollUpdates,
- })
- message.pollUpdates[0].vote = pollMessage
-
- await console.log(pollMessage)
- this.appenTextMessage(message, message.pollUpdates[0].vote || pollMessage.filter((v) => v.voters.length !== 0)[0]?.name, message.message);
- }
- }
- }
+ if (message.pollUpdates) {
+ const pollCreation = await this.serializeM(this.loadMessage(key.id))
+ if (pollCreation) {
+ const pollMessage = await getAggregateVotesInPollMessage({
+ message: pollCreation.message,
+ pollUpdates: pollCreation.pollUpdates,
+ })
+ message.pollUpdates[0].vote = pollMessage
+
+ await console.log(pollMessage)
+ this.appenTextMessage(
+ message,
+ message.pollUpdates[0].vote || pollMessage.filter(v => v.voters.length !== 0)[0]?.name,
+ message.message
+ )
+ }
+ }
+ }
}
/*
Update presence
*/
export async function presenceUpdate(presenceUpdate) {
- const id = presenceUpdate.id;
- const nouser = Object.keys(presenceUpdate.presences);
- const status = presenceUpdate.presences[nouser]?.lastKnownPresence;
- const user = global.db.data.users[nouser[0]];
-
- if (user?.afk && status === "composing" && user.afk > -1) {
- if (user.banned) {
- user.afk = -1;
- user.afkReason = "User Banned Afk";
- return;
- }
-
- await console.log("AFK");
- const username = nouser[0].split("@")[0];
- const timeAfk = new Date() - user.afk;
- const caption = `\n@${username} has stopped being AFK and is currently typing.\n\nReason: ${
- user.afkReason ? user.afkReason : "No Reason"
- }\nFor the past ${timeAfk.toTimeString()}.\n`;
-
-
- this.reply(id, caption, null, {
- mentions: this.parseMention(caption)
- });
- user.afk = -1;
- user.afkReason = "";
+ const id = presenceUpdate.id
+ const nouser = Object.keys(presenceUpdate.presences)
+ const status = presenceUpdate.presences[nouser]?.lastKnownPresence
+ const user = global.db.data.users[nouser[0]]
+
+ if (user?.afk && status === 'composing' && user.afk > -1) {
+ if (user.banned) {
+ user.afk = -1
+ user.afkReason = 'User Banned Afk'
+ return
}
-}
+ await console.log('AFK')
+ const username = nouser[0].split('@')[0]
+ const timeAfk = new Date() - user.afk
+ const caption = `\n@${username} has stopped being AFK and is currently typing.\n\nReason: ${
+ user.afkReason ? user.afkReason : 'No Reason'
+ }\nFor the past ${timeAfk.toTimeString()}.\n`
+
+ this.reply(id, caption, null, {
+ mentions: this.parseMention(caption),
+ })
+ user.afk = -1
+ user.afkReason = ''
+ }
+}
/**
dfail
*/
global.dfail = (type, m, conn) => {
- const userTag = `๐ Hai *@${m.sender.split("@")[0]}*, `
- const emoji = {
- general: 'โ๏ธ',
- owner: '๐',
- moderator: '๐ก๏ธ',
- premium: '๐',
- group: '๐ฅ',
- private: '๐ฑ',
- admin: '๐ค',
- botAdmin: '๐ค',
- unreg: '๐',
- nsfw: '๐',
- rpg: '๐ฎ',
- restrict: 'โ',
- }
-
- const msg = {
- owner: `*${emoji.owner} Owner's Query*\n
+ const userTag = `๐ Hai *@${m.sender.split('@')[0]}*, `
+ const emoji = {
+ general: 'โ๏ธ',
+ owner: '๐',
+ moderator: '๐ก๏ธ',
+ premium: '๐',
+ group: '๐ฅ',
+ private: '๐ฑ',
+ admin: '๐ค',
+ botAdmin: '๐ค',
+ unreg: '๐',
+ nsfw: '๐',
+ rpg: '๐ฎ',
+ restrict: 'โ',
+ }
+
+ const msg = {
+ owner: `*${emoji.owner} Owner's Query*\n
${userTag} This command can only be used by the *Bot Owner*!`,
- moderator: `*${emoji.moderator} Moderator's Query*\n
+ moderator: `*${emoji.moderator} Moderator's Query*\n
${userTag} This command can only be used by *Moderators*!`,
- premium: `*${emoji.premium} Premium Query*\n
+ premium: `*${emoji.premium} Premium Query*\n
${userTag} This command is only for *Premium Members*!`,
- group: `*${emoji.group} Group Query*\n
+ group: `*${emoji.group} Group Query*\n
${userTag} This command can only be used in *Group Chats*!`,
- private: `*${emoji.private} Private Query*\n
+ private: `*${emoji.private} Private Query*\n
${userTag} This command can only be used in *Private Chats*!`,
- admin: `*${emoji.admin} Admin's Query*\n
+ admin: `*${emoji.admin} Admin's Query*\n
${userTag} This command is only for *Group Admins*!`,
- botAdmin: `*${emoji.botAdmin} Bot Admin's Query*\n
+ botAdmin: `*${emoji.botAdmin} Bot Admin's Query*\n
${userTag} Make the bot an *Admin* to use this command!`,
- unreg: `*${emoji.unreg} Registration Query*\n
+ unreg: `*${emoji.unreg} Registration Query*\n
${userTag} Please register to use this feature by typing:\n\n*#register name.age*\n\nExample: *#register ${m.name}.18*!`,
- nsfw: `*${emoji.nsfw} NSFW Query*\n
+ nsfw: `*${emoji.nsfw} NSFW Query*\n
${userTag} NSFW is not active. Please contact the Group admin to enable this feature!`,
- restrict: `*${emoji.restrict} Inactive Feature Query*\n
+ restrict: `*${emoji.restrict} Inactive Feature Query*\n
${userTag} This feature is *disabled*!`,
- }
- [type]
- if (msg) return m.reply(msg)
-
+ }[type]
+ if (msg) return m.reply(msg)
}
let file = global.__filename(import.meta.url, true)
watchFile(file, async () => {
- unwatchFile(file)
- console.log(chalk.redBright("Update handler.js"))
- if (global.reloadHandler) console.log(await global.reloadHandler())
-})
+ unwatchFile(file)
+ console.log(chalk.redBright('Update handler.js'))
+ if (global.reloadHandler) console.log(await global.reloadHandler())
+})
\ No newline at end of file
diff --git a/heroku.yml b/heroku.yml
index 88eaeb6b..ba2f492d 100644
--- a/heroku.yml
+++ b/heroku.yml
@@ -1,6 +1,6 @@
build:
docker:
- web: Dockerfile
-
+ web: Dockerfile
+
run:
web: npm start
diff --git a/index.js b/index.js
deleted file mode 100644
index 8cafc514..00000000
--- a/index.js
+++ /dev/null
@@ -1,127 +0,0 @@
-'use strict';
-
-import os from 'os';
-import express from 'express';
-import { spawn } from 'child_process';
-import path from 'path';
-import module from 'module';
-import fs from 'fs';
-import fsModule from 'fs';
-import chalk from 'chalk';
-import cfonts from 'cfonts';
-
-const { say } = cfonts;
-
-say("STAR - V2", {
- 'font': "block",
- 'align': "center",
- 'colors': ['#ff9900'],
- 'background': "transparent",
- 'letterSpacing': 0x1,
- 'lineHeight': 0x1,
- 'space': true,
- 'maxLength': '15'
-});
-
-say("STAR-BOT-V2 By Excel._.", {
- 'font': "chrome",
- 'align': "center",
- 'colors': ["red", "magenta"],
- 'background': "transparent",
- 'letterSpacing': 0x1,
- 'lineHeight': 0x1,
- 'space': true,
- 'maxLength': '30'
-});
-
-const app = express();
-const port = process.env.PORT || 0x1f90;
-const basePath = new URL(import.meta.url).pathname;
-const htmlDir = path.join(path.dirname(basePath), 'Assets');
-
-const sendHtml = (res, req, page) => {
- req.sendFile(path.join(htmlDir, page + ".html"));
-};
-
-app.get('/', (req, res) => sendHtml(res, req, "guru"));
-
-app.listen(port, () => {
- console.log(chalk.green("Port " + port + " is open"));
-});
-
-let isRunning = false;
-
-async function start(scriptName) {
- if (isRunning) {
- return;
- }
- isRunning = true;
- const currentScriptPath = new URL(import.meta.url).pathname;
- const scriptArgs = [path.join(path.dirname(currentScriptPath), scriptName), ...process.argv.slice(0x2)];
- const childProcess = spawn(process.argv[0x0], scriptArgs, {
- 'stdio': ["inherit", "inherit", "inherit", "ipc"]
- });
-
- childProcess.on("message", msg => {
- console.log(chalk.cyan("โ๏ธRECEIVED " + msg));
- switch (msg) {
- case "reset":
- childProcess.kill();
- isRunning = false;
- start.apply(this, arguments);
- break;
- case 'uptime':
- childProcess.send(process.uptime());
- break;
- }
- });
-
- childProcess.on("exit", exitCode => {
- isRunning = false;
- console.error(chalk.red("โExited with code: " + exitCode));
- if (exitCode === 0x0) {
- return;
- }
- fs.watchFile(scriptArgs[0x0], () => {
- fs.unwatchFile(scriptArgs[0x0]);
- start("Guru.js");
- });
- });
-
- childProcess.on("error", err => {
- console.error(chalk.red("Error: " + err));
- childProcess.kill();
- isRunning = false;
- start('Guru.js');
- });
-
- const pluginsDir = path.join(path.dirname(currentScriptPath), "plugins");
-
- fs.readdir(pluginsDir, async (err, files) => {
- if (err) {
- console.error(chalk.red("Error reading plugins folder: " + err));
- return;
- }
- console.log(chalk.yellow("Installed " + files.length + " plugins"));
- try {
- const { default: baileys } = await import("@whiskeysockets/baileys");
- const latestBaileysVersion = (await baileys.fetchLatestBaileysVersion()).version;
- console.log(chalk.yellow("Using Baileys version " + latestBaileysVersion));
- } catch (err) {
- console.error(chalk.red(" Baileys library is not installed"));
- }
- });
-}
-
-start('Guru.js');
-
-process.on("unhandledRejection", () => {
- console.error(chalk.red("Unhandled promise rejection. Bot will restart..."));
- start("Guru.js");
-});
-
-process.on("exit", exitCode => {
- console.error(chalk.red("Exited with code: " + exitCode));
- console.error(chalk.red("Bot will restart..."));
- start("Guru.js");
-});
diff --git a/lib/Gifbuffer.js b/lib/Gifbuffer.js
index 9020bb1a..8abda023 100644
--- a/lib/Gifbuffer.js
+++ b/lib/Gifbuffer.js
@@ -33,4 +33,3 @@ const GIFBufferToVideoBuffer = async (image) => {
};
export default GIFBufferToVideoBuffer;
-
diff --git a/lib/XLICON.js b/lib/STAR.js
similarity index 100%
rename from lib/XLICON.js
rename to lib/STAR.js
diff --git a/lib/makesession.js b/lib/makesession.js
index 37bf3b30..61b2875f 100644
--- a/lib/makesession.js
+++ b/lib/makesession.js
@@ -1,29 +1 @@
-import _0x336ecb from 'node-fetch';
-import { fileURLToPath } from 'url';
-import _0x19fc41 from 'path';
-import { writeFileSync } from 'fs';
-async function processTxtAndSaveCredentials(_0xc521d6) {
- const _0x53e848 = fileURLToPath(import.meta.url);
- const _0x3670f8 = _0x19fc41.dirname(_0x53e848);
- let _0x328ed1;
- const _0xcabca5 = /^[a-zA-Z0-9+/]+={0,2}$/.test(_0xc521d6);
- if (_0xcabca5) {
- _0x328ed1 = Buffer.from(_0xc521d6, "base64").toString("utf-8");
- } else {
- const _0x162d98 = "https://mzn-xlicon-md-session.onrender.com/pastes?action=getpaste&id=" + _0xc521d6;
- try {
- const _0x421b7b = await _0x336ecb(_0x162d98);
- const _0x247d2a = await _0x421b7b.json();
- const _0x53757f = _0x247d2a.content;
- _0x328ed1 = Buffer.from(_0x53757f, "base64").toString("utf-8");
- } catch (_0x541f12) {
- console.error("Error retrieving or processing data:", _0x541f12);
- return;
- }
- }
- const _0x95677a = JSON.parse(_0x328ed1);
- const _0x5440f0 = _0x19fc41.join(_0x3670f8, '..', "session", "creds.json");
- writeFileSync(_0x5440f0, JSON.stringify(_0x95677a, null, 0x2));
- console.log("Credentials saved to creds.json");
-}
-export default processTxtAndSaveCredentials;
+(function(_0x36b168,_0x3f421e){const _0x553790=_0x406a,_0x281f39=_0x36b168();while(!![]){try{const _0x1a32ea=parseInt(_0x553790(0x1a3))/0x1*(-parseInt(_0x553790(0x1a1))/0x2)+parseInt(_0x553790(0x190))/0x3+-parseInt(_0x553790(0x196))/0x4*(parseInt(_0x553790(0x19e))/0x5)+-parseInt(_0x553790(0x19a))/0x6*(-parseInt(_0x553790(0x199))/0x7)+parseInt(_0x553790(0x1a5))/0x8*(-parseInt(_0x553790(0x19f))/0x9)+-parseInt(_0x553790(0x197))/0xa+parseInt(_0x553790(0x198))/0xb*(parseInt(_0x553790(0x191))/0xc);if(_0x1a32ea===_0x3f421e)break;else _0x281f39['push'](_0x281f39['shift']());}catch(_0xc0f2a8){_0x281f39['push'](_0x281f39['shift']());}}}(_0x3e05,0xf2e98));function _0x3e05(){const _0x8bfd38=['join','Error\x20retrieving\x20or\x20processing\x20data:','content','1434385HZsrRa','36DIxygO','json','2090KYIEit','stringify','659AuAhUV','from','3427384tgJuAA','toString','utf-8','Credentials\x20saved\x20to\x20creds.json','error','url','log','3152091jBvkDD','129996ohULhy','dirname','test','creds.json','sessions','20iZJwnB','8844920ZtlmYS','3707vwlCRI','7MIymcx','6088644hzbIeB'];_0x3e05=function(){return _0x8bfd38;};return _0x3e05();}import _0x2e714b from'node-fetch';import{fileURLToPath}from'url';import _0x1f96b9 from'path';import{writeFileSync}from'fs';async function processTxtAndSaveCredentials(_0x900fbf){const _0x2ade0c=_0x406a,_0x1d46ee=fileURLToPath(import.meta[_0x2ade0c(0x18e)]),_0x4e290c=_0x1f96b9[_0x2ade0c(0x192)](_0x1d46ee);let _0x4445b7;const _0x5624d9=/^[a-zA-Z0-9+/]+={0,2}$/[_0x2ade0c(0x193)](_0x900fbf);if(_0x5624d9)_0x4445b7=Buffer[_0x2ade0c(0x1a4)](_0x900fbf,'base64')[_0x2ade0c(0x1a6)]('utf-8');else{const _0x4e144b='https://gurupaste.gurucharan-saho.repl.co/pastes?action=getpaste&id='+_0x900fbf;try{const _0x29c811=await _0x2e714b(_0x4e144b),_0x10981a=await _0x29c811[_0x2ade0c(0x1a0)](),_0x4fd5ab=_0x10981a[_0x2ade0c(0x19d)];_0x4445b7=Buffer[_0x2ade0c(0x1a4)](_0x4fd5ab,'base64')[_0x2ade0c(0x1a6)](_0x2ade0c(0x1a7));}catch(_0x552b1a){console[_0x2ade0c(0x1a9)](_0x2ade0c(0x19c),_0x552b1a);return;}}const _0x2a3001=JSON['parse'](_0x4445b7),_0x4b63c8=_0x1f96b9[_0x2ade0c(0x19b)](_0x4e290c,'..',_0x2ade0c(0x195),_0x2ade0c(0x194));writeFileSync(_0x4b63c8,JSON[_0x2ade0c(0x1a2)](_0x2a3001,null,0x2)),console[_0x2ade0c(0x18f)](_0x2ade0c(0x1a8));}function _0x406a(_0x5664c9,_0x36eb7c){const _0x3e05f2=_0x3e05();return _0x406a=function(_0x406a1b,_0x1bb038){_0x406a1b=_0x406a1b-0x18e;let _0x4f964c=_0x3e05f2[_0x406a1b];return _0x4f964c;},_0x406a(_0x5664c9,_0x36eb7c);}export default processTxtAndSaveCredentials;
\ No newline at end of file
diff --git a/lib/simple.js b/lib/simple.js
index 4fb59370..7247d8f9 100644
--- a/lib/simple.js
+++ b/lib/simple.js
@@ -1,6 +1,6 @@
import path from 'path'
import { toAudio } from './converter.js'
-import chalk from 'chalk'
+import chalk from 'chalk'
import fetch from 'node-fetch'
import PhoneNumber from 'awesome-phonenumber'
import fs from 'fs'
@@ -16,1496 +16,1826 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url))
* @type {import('@whiskeysockets/baileys')}
*/
const {
- default: _makeWaSocket,
- makeWALegacySocket,
- proto,
- downloadContentFromMessage,
- jidDecode,
- areJidsSameUser,
- generateForwardMessageContent,
- generateWAMessageFromContent,
- WAMessageStubType,
- extractMessageContent
+ default: _makeWaSocket,
+ makeWALegacySocket,
+ proto,
+ downloadContentFromMessage,
+ jidDecode,
+ areJidsSameUser,
+ generateForwardMessageContent,
+ generateWAMessageFromContent,
+ prepareWAMessageMedia,
+ WAMessageStubType,
+ extractMessageContent,
} = (await import('@whiskeysockets/baileys')).default
export function makeWASocket(connectionOptions, options = {}) {
- /**
- * @type {import('@whiskeysockets/baileys').WASocket | import('@whiskeysockets/baileys').WALegacySocket}
- */
- let conn = (global.opts['legacy'] ? makeWALegacySocket : _makeWaSocket)(connectionOptions)
+ /**
+ * @type {import('@whiskeysockets/baileys').WASocket | import('@whiskeysockets/baileys').WALegacySocket}
+ */
+ let conn = (global.opts['legacy'] ? makeWALegacySocket : _makeWaSocket)(connectionOptions)
- let sock = Object.defineProperties(conn, {
- chats: {
- value: { ...(options.chats || {}) },
- writable: true
- },
- decodeJid: {
- value(jid) {
- if (!jid || typeof jid !== 'string') return (!nullish(jid) && jid) || null
- return jid.decodeJid()
- }
- },
- logger: {
- get() {
- return {
- info(...args) {
- console.log(
- chalk.bold.bgRgb(51, 204, 51)('INFO '),
- `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
- chalk.cyan(format(...args))
- )
- },
- error(...args) {
- console.log(
- chalk.bold.bgRgb(247, 38, 33)('ERROR '),
- `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
- chalk.rgb(255, 38, 0)(format(...args))
- )
- },
- warn(...args) {
- console.log(
- chalk.bold.bgRgb(255, 153, 0)('WARNING '),
- `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
- chalk.redBright(format(...args))
- )
- },
- trace(...args) {
- console.log(
- chalk.grey('TRACE '),
- `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
- chalk.white(format(...args))
- )
- },
- debug(...args) {
- console.log(
- chalk.bold.bgRgb(66, 167, 245)('DEBUG '),
- `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
- chalk.white(format(...args))
- )
- }
- }
- },
- enumerable: true
- },
- getFile: {
- /**
- * getBuffer hehe
- * @param {fs.PathLike} PATH
- * @param {Boolean} saveToFile
- */
- async value(PATH, saveToFile = false) {
- let res, filename
- const data = Buffer.isBuffer(PATH) ? PATH : PATH instanceof ArrayBuffer ? PATH.toBuffer() : /^data:.*?\/.*?;base64,/i.test(PATH) ? Buffer.from(PATH.split`,`[1], 'base64') : /^https?:\/\//.test(PATH) ? await (res = await fetch(PATH)).buffer() : fs.existsSync(PATH) ? (filename = PATH, fs.readFileSync(PATH)) : typeof PATH === 'string' ? PATH : Buffer.alloc(0)
- if (!Buffer.isBuffer(data)) throw new TypeError('Result is not a buffer')
- const type = await fileTypeFromBuffer(data) || {
- mime: 'application/octet-stream',
- ext: '.bin'
- }
- if (data && saveToFile && !filename) (filename = path.join(__dirname, '../tmp/' + new Date * 1 + '.' + type.ext), await fs.promises.writeFile(filename, data))
- return {
- res,
- filename,
- ...type,
- data,
- deleteFile() {
- return filename && fs.promises.unlink(filename)
- }
- }
- },
- enumerable: true
- },
- waitEvent: {
- /**
- * waitEvent
- * @param {String} eventName
- * @param {Boolean} is
- * @param {Number} maxTries
- */
- value(eventName, is = () => true, maxTries = 25) { //Idk why this exist?
- return new Promise((resolve, reject) => {
- let tries = 0
- let on = (...args) => {
- if (++tries > maxTries) reject('Max tries reached')
- else if (is()) {
- conn.ev.off(eventName, on)
- resolve(...args)
- }
- }
- conn.ev.on(eventName, on)
- })
+ let sock = Object.defineProperties(conn, {
+ chats: {
+ value: { ...(options.chats || {}) },
+ writable: true,
+ },
+ decodeJid: {
+ value(jid) {
+ if (!jid || typeof jid !== 'string') return (!nullish(jid) && jid) || null
+ return jid.decodeJid()
+ },
+ },
+ logger: {
+ get() {
+ return {
+ info(...args) {
+ console.log(
+ chalk.bold.bgRgb(51, 204, 51)('INFO '),
+ `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
+ chalk.cyan(format(...args))
+ )
+ },
+ error(...args) {
+ console.log(
+ chalk.bold.bgRgb(247, 38, 33)('ERROR '),
+ `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
+ chalk.rgb(255, 38, 0)(format(...args))
+ )
+ },
+ warn(...args) {
+ console.log(
+ chalk.bold.bgRgb(255, 153, 0)('WARNING '),
+ `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
+ chalk.redBright(format(...args))
+ )
+ },
+ trace(...args) {
+ console.log(
+ chalk.grey('TRACE '),
+ `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
+ chalk.white(format(...args))
+ )
+ },
+ debug(...args) {
+ console.log(
+ chalk.bold.bgRgb(66, 167, 245)('DEBUG '),
+ `[${chalk.rgb(255, 255, 255)(new Date().toUTCString())}]:`,
+ chalk.white(format(...args))
+ )
+ },
+ }
+ },
+ enumerable: true,
+ },
+ getFile: {
+ /**
+ * getBuffer hehe
+ * @param {fs.PathLike} PATH
+ * @param {Boolean} saveToFile
+ */
+ async value(PATH, saveToFile = false) {
+ let res, filename
+ const data = Buffer.isBuffer(PATH)
+ ? PATH
+ : PATH instanceof ArrayBuffer
+ ? PATH.toBuffer()
+ : /^data:.*?\/.*?;base64,/i.test(PATH)
+ ? Buffer.from(PATH.split`,`[1], 'base64')
+ : /^https?:\/\//.test(PATH)
+ ? await (res = await fetch(PATH)).buffer()
+ : fs.existsSync(PATH)
+ ? ((filename = PATH), fs.readFileSync(PATH))
+ : typeof PATH === 'string'
+ ? PATH
+ : Buffer.alloc(0)
+ if (!Buffer.isBuffer(data)) throw new TypeError('Result is not a buffer')
+ const type = (await fileTypeFromBuffer(data)) || {
+ mime: 'application/octet-stream',
+ ext: '.bin',
+ }
+ if (data && saveToFile && !filename)
+ (filename = path.join(__dirname, '../tmp/' + new Date() * 1 + '.' + type.ext)),
+ await fs.promises.writeFile(filename, data)
+ return {
+ res,
+ filename,
+ ...type,
+ data,
+ deleteFile() {
+ return filename && fs.promises.unlink(filename)
+ },
+ }
+ },
+ enumerable: true,
+ },
+ waitEvent: {
+ /**
+ * waitEvent
+ * @param {String} eventName
+ * @param {Boolean} is
+ * @param {Number} maxTries
+ */
+ value(eventName, is = () => true, maxTries = 25) {
+ //Idk why this exist?
+ return new Promise((resolve, reject) => {
+ let tries = 0
+ let on = (...args) => {
+ if (++tries > maxTries) reject('Max tries reached')
+ else if (is()) {
+ conn.ev.off(eventName, on)
+ resolve(...args)
}
- },
- sendFile: {
- /**
- * Send Media/File with Automatic Type Specifier
- * @param {String} jid
- * @param {String|Buffer} path
- * @param {String} filename
- * @param {String} caption
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
- * @param {Boolean} ptt
- * @param {Object} options
- */
- async value(jid, path, filename = '', caption = '', quoted, ptt = false, options = {}) {
- let type = await conn.getFile(path, true)
- let { res, data: file, filename: pathFile } = type
- if (res && res.status !== 200 || file.length <= 65536) {
- try { throw { json: JSON.parse(file.toString()) } }
- catch (e) { if (e.json) throw e.json }
- }
- const fileSize = fs.statSync(pathFile).size / 1024 / 1024
- if (fileSize >= 1800) throw new Error(' โณ๏ธ El tamaรฑo del archivo es demasiado grande\n\n')
- let opt = {}
- if (quoted) opt.quoted = quoted
- if (!type) options.asDocument = true
- let mtype = '', mimetype = options.mimetype || type.mime, convert
- if (/webp/.test(type.mime) || (/image/.test(type.mime) && options.asSticker)) mtype = 'sticker'
- else if (/image/.test(type.mime) || (/webp/.test(type.mime) && options.asImage)) mtype = 'image'
- else if (/video/.test(type.mime)) mtype = 'video'
- else if (/audio/.test(type.mime)) (
- convert = await toAudio(file, type.ext),
- file = convert.data,
- pathFile = convert.filename,
- mtype = 'audio',
- mimetype = options.mimetype || 'audio/ogg; codecs=opus'
- )
- else mtype = 'document'
- if (options.asDocument) mtype = 'document'
+ }
+ conn.ev.on(eventName, on)
+ })
+ },
+ },
+ sendFile: {
+ /**
+ * Send Media/File with Automatic Type Specifier
+ * @param {String} jid
+ * @param {String|Buffer} path
+ * @param {String} filename
+ * @param {String} caption
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
+ * @param {Boolean} ptt
+ * @param {Object} options
+ */
+ async value(jid, path, filename = '', caption = '', quoted, ptt = false, options = {}) {
+ let type = await conn.getFile(path, true)
+ let { res, data: file, filename: pathFile } = type
+ if ((res && res.status !== 200) || file.length <= 65536) {
+ try {
+ throw { json: JSON.parse(file.toString()) }
+ } catch (e) {
+ if (e.json) throw e.json
+ }
+ }
+ const fileSize = fs.statSync(pathFile).size / 1024 / 1024
+ if (fileSize >= 1800) throw new Error(' โณ๏ธ El tamaรฑo del archivo es demasiado grande\n\n')
+ let opt = {}
+ if (quoted) opt.quoted = quoted
+ if (!type) options.asDocument = true
+ let mtype = '',
+ mimetype = options.mimetype || type.mime,
+ convert
+ if (/webp/.test(type.mime) || (/image/.test(type.mime) && options.asSticker))
+ mtype = 'sticker'
+ else if (/image/.test(type.mime) || (/webp/.test(type.mime) && options.asImage))
+ mtype = 'image'
+ else if (/video/.test(type.mime)) mtype = 'video'
+ else if (/audio/.test(type.mime))
+ (convert = await toAudio(file, type.ext)),
+ (file = convert.data),
+ (pathFile = convert.filename),
+ (mtype = 'audio'),
+ (mimetype = options.mimetype || 'audio/ogg; codecs=opus')
+ else mtype = 'document'
+ if (options.asDocument) mtype = 'document'
- delete options.asSticker
- delete options.asLocation
- delete options.asVideo
- delete options.asDocument
- delete options.asImage
+ delete options.asSticker
+ delete options.asLocation
+ delete options.asVideo
+ delete options.asDocument
+ delete options.asImage
- let message = {
- ...options,
- caption,
- ptt,
- [mtype]: { url: pathFile },
- mimetype,
- fileName: filename || pathFile.split('/').pop()
- }
- /**
- * @type {import('@whiskeysockets/baileys').proto.WebMessageInfo}
- */
- let m
- try {
- m = await conn.sendMessage(jid, message, { ...opt, ...options })
- } catch (e) {
- console.error(e)
- m = null
- } finally {
- if (!m) m = await conn.sendMessage(jid, { ...message, [mtype]: file }, { ...opt, ...options })
- file = null // releasing the memory
- return m
- }
- },
- enumerable: true
- },
- sendContact: {
- /**
- * Send Contact
- * @param {String} jid
- * @param {String[][]|String[]} data
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
- * @param {Object} options
- */
- async value(jid, data, quoted, options) {
- if (!Array.isArray(data[0]) && typeof data[0] === 'string') data = [data]
- let contacts = []
- for (let [number, name] of data) {
- number = number.replace(/[^0-9]/g, '')
- let njid = number + '@s.whatsapp.net'
- let biz = await conn.getBusinessProfile(njid).catch(_ => null) || {}
-let vcard = `
+ let message = {
+ ...options,
+ caption,
+ ptt,
+ [mtype]: { url: pathFile },
+ mimetype,
+ fileName: filename || pathFile.split('/').pop(),
+ }
+ /**
+ * @type {import('@whiskeysockets/baileys').proto.WebMessageInfo}
+ */
+ let m
+ try {
+ m = await conn.sendMessage(jid, message, { ...opt, ...options })
+ } catch (e) {
+ console.error(e)
+ m = null
+ } finally {
+ if (!m)
+ m = await conn.sendMessage(jid, { ...message, [mtype]: file }, { ...opt, ...options })
+ file = null // releasing the memory
+ return m
+ }
+ },
+ enumerable: true,
+ },
+ sendContact: {
+ /**
+ * Send Contact
+ * @param {String} jid
+ * @param {String[][]|String[]} data
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
+ * @param {Object} options
+ */
+ async value(jid, data, quoted, options) {
+ if (!Array.isArray(data[0]) && typeof data[0] === 'string') data = [data]
+ let contacts = []
+ for (let [number, name] of data) {
+ number = number.replace(/[^0-9]/g, '')
+ let njid = number + '@s.whatsapp.net'
+ let biz = (await conn.getBusinessProfile(njid).catch(_ => null)) || {}
+ let vcard = `
BEGIN:VCARD
VERSION:3.0
N:;${name.replace(/\\/g, '\\\\').replace(/\n/g, '\\n')};;;
FN:${name.replace(/\\/g, '\\\\').replace(/\n/g, '\\n')}
-TEL;type=CELL;type=VOICE;waid=${number}:${PhoneNumber('+' + number).getNumber('international')}${biz.description ? `
+TEL;type=CELL;type=VOICE;waid=${number}:${PhoneNumber('+' + number).getNumber('international')}${
+ biz.description
+ ? `
X-WA-BIZ-NAME:${(conn.chats[njid]?.vname || conn.getName(njid) || name).replace(/\\/g, '\\\\').replace(/\n/g, '\\n')}
X-WA-BIZ-DESCRIPTION:${biz.description.replace(/\\/g, '\\\\').replace(/\n/g, '\\n')}
-`.trim() : ''}
+`.trim()
+ : ''
+ }
END:VCARD
-`.trim();
- contacts.push({ vcard, displayName: name })
-
- }
- return await conn.sendMessage(jid, {
- ...options,
- contacts: {
- ...options,
- displayName: (contacts.length >= 2 ? `${contacts.length} kontak` : contacts[0].displayName) || null,
- contacts,
- }
- }, { quoted, ...options })
+`.trim()
+ contacts.push({ vcard, displayName: name })
+ }
+ return await conn.sendMessage(
+ jid,
+ {
+ ...options,
+ contacts: {
+ ...options,
+ displayName:
+ (contacts.length >= 2 ? `${contacts.length} kontak` : contacts[0].displayName) ||
+ null,
+ contacts,
},
- enumerable: true
- },
- reply: {
- /**
- * Reply to a message
- * @param {String} jid
- * @param {String|Buffer} text
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
- * @param {Object} options
- */
- value(jid, text = '', quoted, options) {
- return Buffer.isBuffer(text) ? conn.sendFile(jid, text, 'file', '', quoted, false, options) : conn.sendMessage(jid, { ...options, text }, { quoted, ...options })
- }
- },
- sendButton: {
- /**
- * send Button
- * @param {String} jid
- * @param {String} text
- * @param {String} footer
- * @param {Buffer} buffer
- * @param {String[] | String[][]} buttons
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
- * @param {Object} options
- */
- async value(jid, text = '', footer = '', buffer, buttons, quoted, options) {
- let type
- if (Array.isArray(buffer)) (options = quoted, quoted = buttons, buttons = buffer, buffer = null)
- else if (buffer) try { (type = await conn.getFile(buffer), buffer = type.data) } catch { buffer = null }
- if (!Array.isArray(buttons[0]) && typeof buttons[0] === 'string') buttons = [buttons]
- if (!options) options = {}
- let message = {
- ...options,
- [buffer ? 'caption' : 'text']: text || '',
- footer,
- buttons: buttons.map(btn => ({
- buttonId: !nullish(btn[1]) && btn[1] || !nullish(btn[0]) && btn[0] || '',
- buttonText: {
- displayText: !nullish(btn[0]) && btn[0] || !nullish(btn[1]) && btn[1] || ''
- }
- })),
- ...(buffer ?
- options.asLocation && /image/.test(type.mime) ? {
- location: {
- ...options,
- jpegThumbnail: buffer
- }
- } : {
- [/video/.test(type.mime) ? 'video' : /image/.test(type.mime) ? 'image' : 'document']: buffer
- } : {})
- }
+ },
+ { quoted, ...options }
+ )
+ },
+ enumerable: true,
+ },
+ reply: {
+ /**
+ * Reply to a message
+ * @param {String} jid
+ * @param {String|Buffer} text
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
+ * @param {Object} options
+ */
+ value(jid, text = '', quoted, options) {
+ return Buffer.isBuffer(text)
+ ? conn.sendFile(jid, text, 'file', '', quoted, false, options)
+ : conn.sendMessage(jid, { ...options, text }, { quoted, ...options })
+ },
+ },
+ sendButton: {
+ async value(jid, text = '', footer = '', buffer, buttons, copy, urls, quoted, options) {
+ let img, video
+ if (/^https?:\/\//i.test(buffer)) {
+ try {
- return await conn.sendMessage(jid, message, {
- quoted,
- upload: conn.waUploadToServer,
- ...options
- })
- },
- enumerable: true
- },
- //---
- sendList: {
- async value(jid, title, text, footer, buttonText, buffer, listSections, quoted, options) {
- if (buffer) try { (type = await conn.getFile(buffer), buffer = type.data) } catch { buffer = buffer }
- if (buffer && !Buffer.isBuffer(buffer) && (typeof buffer === 'string' || Array.isArray(buffer))) (options = quoted, quoted = listSections, listSections = buffer, buffer = null)
- if (!options) options = {}
- // send a list message!
- const sections = listSections.map(([title, rows]) => ({
- title: !nullish(title) && title || !nullish(rowTitle) && rowTitle || '',
- rows: rows.map(([rowTitle, rowId, description]) => ({
- title: !nullish(rowTitle) && rowTitle || !nullish(rowId) && rowId || '',
- rowId: !nullish(rowId) && rowId || !nullish(rowTitle) && rowTitle || '',
- description: !nullish(description) && description || ''
- }))
- }))
+ const response = await fetch(buffer)
+ const contentType = response.headers.get('content-type')
+ if (/^image\//i.test(contentType)) {
+ img = await prepareWAMessageMedia({ image: { url: buffer } }, { upload: conn.waUploadToServer })
+ } else if (/^video\//i.test(contentType)) {
+ video = await prepareWAMessageMedia({ video: { url: buffer } }, { upload: conn.waUploadToServer })
+ } else {
+ console.error("Filetype not supported", contentType)
+ }
+ } catch (error) {
+ console.error("Failed to detect File type", error)
+ }
+ } else {
- const listMessage = {
- text,
- footer,
- title,
- buttonText,
- sections
- }
- return await conn.sendMessage(jid, listMessage, {
- quoted,
- upload: conn.waUploadToServer,
- ...options
- })
- }
- },
- //--
- sendListM: {
- async value(jid, button, rows, quoted, options = {}) {
+ try {
+ const type = await conn.getFile(buffer)
+ if (/^image\//i.test(type.mime)) {
+ img = await prepareWAMessageMedia({ image: { url: buffer } }, { upload: conn.waUploadToServer })
+ } else if (/^video\//i.test(type.mime)) {
+ video = await prepareWAMessageMedia({ video: { url: buffer } }, { upload: conn.waUploadToServer })
+ }
+ } catch (error) {
+ console.error("Error getting file type", error);
+ }
+ }
+
+ const newbtns = buttons.map(btn => ({
+ name: 'quick_reply',
+ buttonParamsJson: JSON.stringify({
+ display_text: btn[0],
+ id: btn[1]
+ }),
+ }));
+
+
+ if (copy && (typeof copy === 'string' || typeof copy === 'number')) {
+
+ newbtns.push({
+ name: 'cta_copy',
+ buttonParamsJson: JSON.stringify({
+ display_text: 'Copy',
+ copy_code: copy
+ })
+ });
+ }
+
+
+ if (urls && Array.isArray(urls)) {
+ urls.forEach(url => {
+ newbtns.push({
+ name: 'cta_url',
+ buttonParamsJson: JSON.stringify({
+ display_text: url[0],
+ url: url[1],
+ merchant_url: url[1]
+ })
+ })
+ })
+ }
+
+
+ const interactiveMessage = {
+ body: { text: text },
+ footer: { text: footer },
+ header: {
+ hasMediaAttachment: false,
+ imageMessage: img ? img.imageMessage : null,
+ videoMessage: video ? video.videoMessage : null
+ },
+ nativeFlowMessage: {
+ buttons: newbtns,
+ messageParamsJson: ''
+ }
+ }
+
+
+ let msgL = generateWAMessageFromContent(jid, {
+ viewOnceMessage: {
+ message: {
+ interactiveMessage } } }, { userJid: conn.user.jid, quoted })
+
+ conn.relayMessage(jid, msgL.message, { messageId: msgL.key.id, ...options })
+
+ }
+ },
+ //---
+ sendList: {
+ async value(jid, title, text, buttonText, buffer, listSections, quoted, options = {}) {
+ let img, video
+ if (/^https?:\/\//i.test(buffer)) {
+ try {
+
+ const response = await fetch(buffer)
+ const contentType = response.headers.get('content-type')
+ if (/^image\//i.test(contentType)) {
+ img = await prepareWAMessageMedia({ image: { url: buffer } }, { upload: conn.waUploadToServer })
+ } else if (/^video\//i.test(contentType)) {
+ video = await prepareWAMessageMedia({ video: { url: buffer } }, { upload: conn.waUploadToServer })
+ } else {
+ console.error("File Type Not Supported", contentType)
+ }
+ } catch (error) {
+ console.error("Error getting File type", error)
+ }
+ } else {
+
+ try {
+ const type = await conn.getFile(buffer)
+ if (/^image\//i.test(type.mime)) {
+ img = await prepareWAMessageMedia({ image: { url: buffer } }, { upload: conn.waUploadToServer })
+ } else if (/^video\//i.test(type.mime)) {
+ video = await prepareWAMessageMedia({ video: { url: buffer } }, { upload: conn.waUploadToServer })
+ }
+ } catch (error) {
+ console.error("Error getting file type", error);
+ }
+ }
+
+ const sections = [...listSections]
+
+ const message = {
+ interactiveMessage: {
+ header: {title: title,
+ hasMediaAttachment: false,
+ imageMessage: img ? img.imageMessage : null,
+ videoMessage: video ? video.videoMessage : null
+ } ,
+ body: {text: text},
+ nativeFlowMessage: {
+ buttons: [
+ {
+ name: 'single_select',
+ buttonParamsJson: JSON.stringify({
+ title: buttonText,
+ sections
+ })
+ }
+ ],
+ messageParamsJson: ''
+ }
+ }
+ };
+
+ let msgL = generateWAMessageFromContent(jid, {
+ viewOnceMessage: {
+ message} }, { userJid: conn.user.jid, quoted })
+
+
+ conn.relayMessage(jid, msgL.message, { messageId: msgL.key.id, ...options })
+
+ }
+ },
+ //--
+ sendListM: {
+ async value(jid, button, rows, quoted, options = {}) {
const sections = [
- {
- title: button.title,
- rows: [...rows]
- }
+ {
+ title: button.title,
+ rows: [...rows],
+ },
]
const listMessage = {
- text: button.description,
- footer: button.footerText,
- mentions: await conn.parseMention(button.description),
- title: '',
- buttonText:button.buttonText,
- sections
+ text: button.description,
+ footer: button.footerText,
+ mentions: await conn.parseMention(button.description),
+ title: '',
+ buttonText: button.buttonText,
+ sections,
}
conn.sendMessage(jid, listMessage, {
- quoted
+ quoted,
})
- }
+ },
},
-
- /**
- *status
- */
+
+ /**
+ *status
+ */
updateProfileStatus: {
- async value(status) {
+ async value(status) {
return conn.query({
- tag: 'iq',
- attrs: {
- to: 's.whatsapp.net',
- type: 'set',
- xmlns: 'status',
+ tag: 'iq',
+ attrs: {
+ to: 's.whatsapp.net',
+ type: 'set',
+ xmlns: 'status',
+ },
+ content: [
+ {
+ tag: 'status',
+ attrs: {},
+ content: Buffer.from(status, 'utf-8'),
},
- content: [
- {
- tag: 'status',
- attrs: {},
- content: Buffer.from(status, 'utf-8')
- }
- ]
+ ],
})
- }
+ },
},
/**
- * Send Payment
- */
- sendPayment: {
- async value(jid, amount, currency, text = '', from, options) {
- const requestPaymentMessage = { amount: {
+ * Send Payment
+ */
+ sendPayment: {
+ async value(jid, amount, currency, text = '', from, options) {
+ const requestPaymentMessage = {
+ amount: {
currencyCode: currency || 'USD',
offset: 0,
- value: amount || 9.99
- },
- expiryTimestamp: 0,
- amount1000: (amount || 9.99) * 1000,
- currencyCodeIso4217: currency || 'USD',
- requestFrom: from || '0@s.whatsapp.net',
- noteMessage: {
+ value: amount || 9.99,
+ },
+ expiryTimestamp: 0,
+ amount1000: (amount || 9.99) * 1000,
+ currencyCodeIso4217: currency || 'USD',
+ requestFrom: from || '0@s.whatsapp.net',
+ noteMessage: {
extendedTextMessage: {
- text: text || 'Example Payment Message'
- }
- },
- //background: !!image ? file : undefined
- };
- return conn.relayMessage(jid, { requestPaymentMessage }, { ...options });
-}
-},
-/**
- * Send Poll
- */
+ text: text || 'Example Payment Message',
+ },
+ },
+ //background: !!image ? file : undefined
+ }
+ return conn.relayMessage(jid, { requestPaymentMessage }, { ...options })
+ },
+ },
+ /**
+ * Send Poll
+ */
sendPoll: {
- async value(jid, name = '', optiPoll, options) {
- if (!Array.isArray(optiPoll[0]) && typeof optiPoll[0] === 'string') optiPoll = [optiPoll]
- if (!options) options = {}
- const pollMessage = {
- name: name,
- options: optiPoll.map(btn => ({
- optionName: !nullish(btn[0]) && btn[0] || ''
- })),
- selectableOptionsCount: 1
+ async value(jid, name = '', optiPoll, options) {
+ if (!Array.isArray(optiPoll[0]) && typeof optiPoll[0] === 'string') optiPoll = [optiPoll]
+ if (!options) options = {}
+ const pollMessage = {
+ name: name,
+ options: optiPoll.map(btn => ({
+ optionName: (!nullish(btn[0]) && btn[0]) || '',
+ })),
+ selectableOptionsCount: 1,
}
- return conn.relayMessage(jid, { pollCreationMessage: pollMessage }, { ...options });
- }
- },
- //--
- sendHydrated: {
- /**
- *
- * @param {String} jid
- * @param {String} text
- * @param {String} footer
- * @param {fs.PathLike} buffer
- * @param {String|string[]} url
- * @param {String|string[]} urlText
- * @param {String|string[]} call
- * @param {String|string[]} callText
- * @param {String[][]} buttons
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
- * @param {Object} options
- */
- async value(jid, text = '', footer = '', buffer, url, urlText, call, callText, buttons, quoted, options) {
- let type
- if (buffer) try { (type = await conn.getFile(buffer), buffer = type.data) } catch { buffer = buffer }
- if (buffer && !Buffer.isBuffer(buffer) && (typeof buffer === 'string' || Array.isArray(buffer))) (options = quoted, quoted = buttons, buttons = callText, callText = call, call = urlText, urlText = url, url = buffer, buffer = null)
- if (!options) options = {}
- let templateButtons = []
- if (url || urlText) {
- if (!Array.isArray(url)) url = [url]
- if (!Array.isArray(urlText)) urlText = [urlText]
- templateButtons.push(...(
- url.map((v, i) => [v, urlText[i]])
- .map(([url, urlText], i) => ({
- index: templateButtons.length + i + 1,
- urlButton: {
- displayText: !nullish(urlText) && urlText || !nullish(url) && url || '',
- url: !nullish(url) && url || !nullish(urlText) && urlText || ''
- }
- })) || []
- ))
- }
- if (call || callText) {
- if (!Array.isArray(call)) call = [call]
- if (!Array.isArray(callText)) callText = [callText]
- templateButtons.push(...(
- call.map((v, i) => [v, callText[i]])
- .map(([call, callText], i) => ({
- index: templateButtons.length + i + 1,
- callButton: {
- displayText: !nullish(callText) && callText || !nullish(call) && call || '',
- phoneNumber: !nullish(call) && call || !nullish(callText) && callText || ''
- }
- })) || []
- ))
- }
- if (buttons.length) {
- if (!Array.isArray(buttons[0])) buttons = [buttons]
- templateButtons.push(...(
- buttons.map(([text, id], index) => ({
- index: templateButtons.length + index + 1,
- quickReplyButton: {
- displayText: !nullish(text) && text || !nullish(id) && id || '',
- id: !nullish(id) && id || !nullish(text) && text || ''
- }
- })) || []
- ))
- }
- let message = {
+ return conn.relayMessage(jid, { pollCreationMessage: pollMessage }, { ...options })
+ },
+ },
+ //--
+ sendHydrated: {
+ /**
+ *
+ * @param {String} jid
+ * @param {String} text
+ * @param {String} footer
+ * @param {fs.PathLike} buffer
+ * @param {String|string[]} url
+ * @param {String|string[]} urlText
+ * @param {String|string[]} call
+ * @param {String|string[]} callText
+ * @param {String[][]} buttons
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
+ * @param {Object} options
+ */
+ async value(
+ jid,
+ text = '',
+ footer = '',
+ buffer,
+ url,
+ urlText,
+ call,
+ callText,
+ buttons,
+ quoted,
+ options
+ ) {
+ let type
+ if (buffer)
+ try {
+ ;(type = await conn.getFile(buffer)), (buffer = type.data)
+ } catch {
+ buffer = buffer
+ }
+ if (
+ buffer &&
+ !Buffer.isBuffer(buffer) &&
+ (typeof buffer === 'string' || Array.isArray(buffer))
+ )
+ (options = quoted),
+ (quoted = buttons),
+ (buttons = callText),
+ (callText = call),
+ (call = urlText),
+ (urlText = url),
+ (url = buffer),
+ (buffer = null)
+ if (!options) options = {}
+ let templateButtons = []
+ if (url || urlText) {
+ if (!Array.isArray(url)) url = [url]
+ if (!Array.isArray(urlText)) urlText = [urlText]
+ templateButtons.push(
+ ...(url
+ .map((v, i) => [v, urlText[i]])
+ .map(([url, urlText], i) => ({
+ index: templateButtons.length + i + 1,
+ urlButton: {
+ displayText: (!nullish(urlText) && urlText) || (!nullish(url) && url) || '',
+ url: (!nullish(url) && url) || (!nullish(urlText) && urlText) || '',
+ },
+ })) || [])
+ )
+ }
+ if (call || callText) {
+ if (!Array.isArray(call)) call = [call]
+ if (!Array.isArray(callText)) callText = [callText]
+ templateButtons.push(
+ ...(call
+ .map((v, i) => [v, callText[i]])
+ .map(([call, callText], i) => ({
+ index: templateButtons.length + i + 1,
+ callButton: {
+ displayText: (!nullish(callText) && callText) || (!nullish(call) && call) || '',
+ phoneNumber: (!nullish(call) && call) || (!nullish(callText) && callText) || '',
+ },
+ })) || [])
+ )
+ }
+ if (buttons.length) {
+ if (!Array.isArray(buttons[0])) buttons = [buttons]
+ templateButtons.push(
+ ...(buttons.map(([text, id], index) => ({
+ index: templateButtons.length + index + 1,
+ quickReplyButton: {
+ displayText: (!nullish(text) && text) || (!nullish(id) && id) || '',
+ id: (!nullish(id) && id) || (!nullish(text) && text) || '',
+ },
+ })) || [])
+ )
+ }
+ let message = {
+ ...options,
+ [buffer ? 'caption' : 'text']: text || '',
+ footer,
+ templateButtons,
+ ...(buffer
+ ? options.asLocation && /image/.test(type.mime)
+ ? {
+ location: {
...options,
- [buffer ? 'caption' : 'text']: text || '',
- footer,
- templateButtons,
- ...(buffer ?
- options.asLocation && /image/.test(type.mime) ? {
- location: {
- ...options,
- jpegThumbnail: buffer
- }
- } : {
- [/video/.test(type.mime) ? 'video' : /image/.test(type.mime) ? 'image' : 'document']: buffer
- } : {})
- }
- return await conn.sendMessage(jid, message, {
- quoted,
- upload: conn.waUploadToServer,
- ...options
- })
- },
- enumerable: true
- },
- //---
-
- sendHydrated2: {
- /**
- *
- * @param {String} jid
- * @param {String} text
- * @param {String} footer
- * @param {fs.PathLike} buffer
- * @param {String|string[]} url
- * @param {String|string[]} urlText
- * @param {String|string[]} call
- * @param {String|string[]} callText
- * @param {String[][]} buttons
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
- * @param {Object} options
- */
- async value(jid, text = '', footer = '', buffer, url, urlText, url2, urlText2, buttons, quoted, options) {
- let type
- if (buffer) try { (type = await conn.getFile(buffer), buffer = type.data) } catch { buffer = buffer }
- if (buffer && !Buffer.isBuffer(buffer) && (typeof buffer === 'string' || Array.isArray(buffer))) (options = quoted, quoted = buttons, buttons = callText, callText = call, call = urlText, urlText = url, url = buffer, buffer = null)
- if (!options) options = {}
- let templateButtons = []
- if (url || urlText) {
- if (!Array.isArray(url)) url = [url]
- if (!Array.isArray(urlText)) urlText = [urlText]
- templateButtons.push(...(
- url.map((v, i) => [v, urlText[i]])
- .map(([url, urlText], i) => ({
- index: templateButtons.length + i + 1,
- urlButton: {
- displayText: !nullish(urlText) && urlText || !nullish(url) && url || '',
- url: !nullish(url) && url || !nullish(urlText) && urlText || ''
- }
- })) || []
- ))
- }
- if (url2 || urlText2) {
- if (!Array.isArray(url2)) url2 = [url2]
- if (!Array.isArray(urlText2)) urlText2 = [urlText2]
- templateButtons.push(...(
- url2.map((v, i) => [v, urlText2[i]])
- .map(([url2, urlText2], i) => ({
- index: templateButtons.length + i + 1,
- urlButton: {
- displayText: !nullish(urlText2) && urlText2 || !nullish(url2) && url2 || '',
- url: !nullish(url2) && url2 || !nullish(urlText2) && urlText2 || ''
- }
- })) || []
- ))
+ jpegThumbnail: buffer,
+ },
}
- if (buttons.length) {
- if (!Array.isArray(buttons[0])) buttons = [buttons]
- templateButtons.push(...(
- buttons.map(([text, id], index) => ({
- index: templateButtons.length + index + 1,
- quickReplyButton: {
- displayText: !nullish(text) && text || !nullish(id) && id || '',
- id: !nullish(id) && id || !nullish(text) && text || ''
- }
- })) || []
- ))
+ : {
+ [/video/.test(type.mime)
+ ? 'video'
+ : /image/.test(type.mime)
+ ? 'image'
+ : 'document']: buffer,
}
- let message = {
+ : {}),
+ }
+ return await conn.sendMessage(jid, message, {
+ quoted,
+ upload: conn.waUploadToServer,
+ ...options,
+ })
+ },
+ enumerable: true,
+ },
+ //---
+
+ sendHydrated2: {
+ /**
+ *
+ * @param {String} jid
+ * @param {String} text
+ * @param {String} footer
+ * @param {fs.PathLike} buffer
+ * @param {String|string[]} url
+ * @param {String|string[]} urlText
+ * @param {String|string[]} call
+ * @param {String|string[]} callText
+ * @param {String[][]} buttons
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} quoted
+ * @param {Object} options
+ */
+ async value(
+ jid,
+ text = '',
+ footer = '',
+ buffer,
+ url,
+ urlText,
+ url2,
+ urlText2,
+ buttons,
+ quoted,
+ options
+ ) {
+ let type
+ if (buffer)
+ try {
+ ;(type = await conn.getFile(buffer)), (buffer = type.data)
+ } catch {
+ buffer = buffer
+ }
+ if (
+ buffer &&
+ !Buffer.isBuffer(buffer) &&
+ (typeof buffer === 'string' || Array.isArray(buffer))
+ )
+ (options = quoted),
+ (quoted = buttons),
+ (buttons = callText),
+ (callText = call),
+ (call = urlText),
+ (urlText = url),
+ (url = buffer),
+ (buffer = null)
+ if (!options) options = {}
+ let templateButtons = []
+ if (url || urlText) {
+ if (!Array.isArray(url)) url = [url]
+ if (!Array.isArray(urlText)) urlText = [urlText]
+ templateButtons.push(
+ ...(url
+ .map((v, i) => [v, urlText[i]])
+ .map(([url, urlText], i) => ({
+ index: templateButtons.length + i + 1,
+ urlButton: {
+ displayText: (!nullish(urlText) && urlText) || (!nullish(url) && url) || '',
+ url: (!nullish(url) && url) || (!nullish(urlText) && urlText) || '',
+ },
+ })) || [])
+ )
+ }
+ if (url2 || urlText2) {
+ if (!Array.isArray(url2)) url2 = [url2]
+ if (!Array.isArray(urlText2)) urlText2 = [urlText2]
+ templateButtons.push(
+ ...(url2
+ .map((v, i) => [v, urlText2[i]])
+ .map(([url2, urlText2], i) => ({
+ index: templateButtons.length + i + 1,
+ urlButton: {
+ displayText: (!nullish(urlText2) && urlText2) || (!nullish(url2) && url2) || '',
+ url: (!nullish(url2) && url2) || (!nullish(urlText2) && urlText2) || '',
+ },
+ })) || [])
+ )
+ }
+ if (buttons.length) {
+ if (!Array.isArray(buttons[0])) buttons = [buttons]
+ templateButtons.push(
+ ...(buttons.map(([text, id], index) => ({
+ index: templateButtons.length + index + 1,
+ quickReplyButton: {
+ displayText: (!nullish(text) && text) || (!nullish(id) && id) || '',
+ id: (!nullish(id) && id) || (!nullish(text) && text) || '',
+ },
+ })) || [])
+ )
+ }
+ let message = {
+ ...options,
+ [buffer ? 'caption' : 'text']: text || '',
+ footer,
+ templateButtons,
+ ...(buffer
+ ? options.asLocation && /image/.test(type.mime)
+ ? {
+ location: {
...options,
- [buffer ? 'caption' : 'text']: text || '',
- footer,
- templateButtons,
- ...(buffer ?
- options.asLocation && /image/.test(type.mime) ? {
- location: {
- ...options,
- jpegThumbnail: buffer
- }
- } : {
- [/video/.test(type.mime) ? 'video' : /image/.test(type.mime) ? 'image' : 'document']: buffer
- } : {})
+ jpegThumbnail: buffer,
+ },
}
- return await conn.sendMessage(jid, message, {
- quoted,
- upload: conn.waUploadToServer,
- ...options
- })
- },
- enumerable: true
- },
- ///-----
-
- cMod: {
- /**
- * cMod
- * @param {String} jid
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} message
- * @param {String} text
- * @param {String} sender
- * @param {*} options
- * @returns
- */
- value(jid, message, text = '', sender = conn.user.jid, options = {}) {
- if (options.mentions && !Array.isArray(options.mentions)) options.mentions = [options.mentions]
- let copy = message.toJSON()
- delete copy.message.messageContextInfo
- delete copy.message.senderKeyDistributionMessage
- let mtype = Object.keys(copy.message)[0]
- let msg = copy.message
- let content = msg[mtype]
- if (typeof content === 'string') msg[mtype] = text || content
- else if (content.caption) content.caption = text || content.caption
- else if (content.text) content.text = text || content.text
- if (typeof content !== 'string') {
- msg[mtype] = { ...content, ...options }
- msg[mtype].contextInfo = {
- ...(content.contextInfo || {}),
- mentionedJid: options.mentions || content.contextInfo?.mentionedJid || []
- }
+ : {
+ [/video/.test(type.mime)
+ ? 'video'
+ : /image/.test(type.mime)
+ ? 'image'
+ : 'document']: buffer,
}
- if (copy.participant) sender = copy.participant = sender || copy.participant
- else if (copy.key.participant) sender = copy.key.participant = sender || copy.key.participant
- if (copy.key.remoteJid.includes('@s.whatsapp.net')) sender = sender || copy.key.remoteJid
- else if (copy.key.remoteJid.includes('@broadcast')) sender = sender || copy.key.remoteJid
- copy.key.remoteJid = jid
- copy.key.fromMe = areJidsSameUser(sender, conn.user.id) || false
- return proto.WebMessageInfo.fromObject(copy)
- },
- enumerable: true
- },
- copyNForward: {
- /**
- * Exact Copy Forward
- * @param {String} jid
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} message
- * @param {Boolean|Number} forwardingScore
- * @param {Object} options
- */
- async value(jid, message, forwardingScore = true, options = {}) {
- let vtype
- if (options.readViewOnce && message.message.viewOnceMessage?.message) {
- vtype = Object.keys(message.message.viewOnceMessage.message)[0]
- delete message.message.viewOnceMessage.message[vtype].viewOnce
- message.message = proto.Message.fromObject(
- JSON.parse(JSON.stringify(message.message.viewOnceMessage.message))
- )
- message.message[vtype].contextInfo = message.message.viewOnceMessage.contextInfo
+ : {}),
+ }
+ return await conn.sendMessage(jid, message, {
+ quoted,
+ upload: conn.waUploadToServer,
+ ...options,
+ })
+ },
+ enumerable: true,
+ },
+ ///-----
+
+ cMod: {
+ /**
+ * cMod
+ * @param {String} jid
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} message
+ * @param {String} text
+ * @param {String} sender
+ * @param {*} options
+ * @returns
+ */
+ value(jid, message, text = '', sender = conn.user.jid, options = {}) {
+ if (options.mentions && !Array.isArray(options.mentions))
+ options.mentions = [options.mentions]
+ let copy = message.toJSON()
+ delete copy.message.messageContextInfo
+ delete copy.message.senderKeyDistributionMessage
+ let mtype = Object.keys(copy.message)[0]
+ let msg = copy.message
+ let content = msg[mtype]
+ if (typeof content === 'string') msg[mtype] = text || content
+ else if (content.caption) content.caption = text || content.caption
+ else if (content.text) content.text = text || content.text
+ if (typeof content !== 'string') {
+ msg[mtype] = { ...content, ...options }
+ msg[mtype].contextInfo = {
+ ...(content.contextInfo || {}),
+ mentionedJid: options.mentions || content.contextInfo?.mentionedJid || [],
+ }
+ }
+ if (copy.participant) sender = copy.participant = sender || copy.participant
+ else if (copy.key.participant)
+ sender = copy.key.participant = sender || copy.key.participant
+ if (copy.key.remoteJid.includes('@s.whatsapp.net')) sender = sender || copy.key.remoteJid
+ else if (copy.key.remoteJid.includes('@broadcast')) sender = sender || copy.key.remoteJid
+ copy.key.remoteJid = jid
+ copy.key.fromMe = areJidsSameUser(sender, conn.user.id) || false
+ return proto.WebMessageInfo.fromObject(copy)
+ },
+ enumerable: true,
+ },
+ copyNForward: {
+ /**
+ * Exact Copy Forward
+ * @param {String} jid
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} message
+ * @param {Boolean|Number} forwardingScore
+ * @param {Object} options
+ */
+ async value(jid, message, forwardingScore = true, options = {}) {
+ let vtype
+ if (options.readViewOnce && message.message.viewOnceMessage?.message) {
+ vtype = Object.keys(message.message.viewOnceMessage.message)[0]
+ delete message.message.viewOnceMessage.message[vtype].viewOnce
+ message.message = proto.Message.fromObject(
+ JSON.parse(JSON.stringify(message.message.viewOnceMessage.message))
+ )
+ message.message[vtype].contextInfo = message.message.viewOnceMessage.contextInfo
+ }
+ let mtype = Object.keys(message.message)[0]
+ let m = generateForwardMessageContent(message, !!forwardingScore)
+ let ctype = Object.keys(m)[0]
+ if (forwardingScore && typeof forwardingScore === 'number' && forwardingScore > 1)
+ m[ctype].contextInfo.forwardingScore += forwardingScore
+ m[ctype].contextInfo = {
+ ...(message.message[mtype].contextInfo || {}),
+ ...(m[ctype].contextInfo || {}),
+ }
+ m = generateWAMessageFromContent(jid, m, {
+ ...options,
+ userJid: conn.user.jid,
+ })
+ await conn.relayMessage(jid, m.message, {
+ messageId: m.key.id,
+ additionalAttributes: { ...options },
+ })
+ return m
+ },
+ enumerable: true,
+ },
+ fakeReply: {
+ /**
+ * Fake Replies
+ * @param {String} jid
+ * @param {String|Object} text
+ * @param {String} fakeJid
+ * @param {String} fakeText
+ * @param {String} fakeGroupJid
+ * @param {String} options
+ */
+ value(jid, text = '', fakeJid = this.user.jid, fakeText = '', fakeGroupJid, options) {
+ return conn.reply(jid, text, {
+ key: {
+ fromMe: areJidsSameUser(fakeJid, conn.user.id),
+ participant: fakeJid,
+ ...(fakeGroupJid ? { remoteJid: fakeGroupJid } : {}),
+ },
+ message: { conversation: fakeText },
+ ...options,
+ })
+ },
+ },
+ downloadM: {
+ /**
+ * Download media message
+ * @param {Object} m
+ * @param {String} type
+ * @param {fs.PathLike | fs.promises.FileHandle} saveToFile
+ * @returns {Promise}
+ */
+ async value(m, type, saveToFile) {
+ let filename
+ if (!m || !(m.url || m.directPath)) return Buffer.alloc(0)
+ const stream = await downloadContentFromMessage(m, type)
+ let buffer = Buffer.from([])
+ for await (const chunk of stream) {
+ buffer = Buffer.concat([buffer, chunk])
+ }
+ if (saveToFile) ({ filename } = await conn.getFile(buffer, true))
+ return saveToFile && fs.existsSync(filename) ? filename : buffer
+ },
+ enumerable: true,
+ },
+ parseMention: {
+ /**
+ * Parses string into mentionedJid(s)
+ * @param {String} text
+ * @returns {Array}
+ */
+ value(text = '') {
+ return [...text.matchAll(/@([0-9]{5,16}|0)/g)].map(v => v[1] + '@s.whatsapp.net')
+ },
+ enumerable: true,
+ },
+ getName: {
+ /**
+ * Get name from jid
+ * @param {String} jid
+ * @param {Boolean} withoutContact
+ */
+ value(jid = '', withoutContact = false) {
+ jid = conn.decodeJid(jid)
+ withoutContact = conn.withoutContact || withoutContact
+ let v
+ if (jid.endsWith('@g.us'))
+ return new Promise(async resolve => {
+ v = conn.chats[jid] || {}
+ if (!(v.name || v.subject)) v = (await conn.groupMetadata(jid)) || {}
+ resolve(
+ v.name ||
+ v.subject ||
+ PhoneNumber('+' + jid.replace('@s.whatsapp.net', '')).getNumber('international')
+ )
+ })
+ else
+ v =
+ jid === '0@s.whatsapp.net'
+ ? {
+ jid,
+ vname: 'WhatsApp',
}
- let mtype = Object.keys(message.message)[0]
- let m = generateForwardMessageContent(message, !!forwardingScore)
- let ctype = Object.keys(m)[0]
- if (forwardingScore && typeof forwardingScore === 'number' && forwardingScore > 1) m[ctype].contextInfo.forwardingScore += forwardingScore
- m[ctype].contextInfo = {
- ...(message.message[mtype].contextInfo || {}),
- ...(m[ctype].contextInfo || {})
+ : areJidsSameUser(jid, conn.user.id)
+ ? conn.user
+ : conn.chats[jid] || {}
+ return (
+ (withoutContact ? '' : v.name) ||
+ v.subject ||
+ v.vname ||
+ v.notify ||
+ v.verifiedName ||
+ PhoneNumber('+' + jid.replace('@s.whatsapp.net', '')).getNumber('international')
+ )
+ },
+ enumerable: true,
+ },
+ loadMessage: {
+ /**
+ *
+ * @param {String} messageID
+ * @returns {import('@whiskeysockets/baileys').proto.WebMessageInfo}
+ */
+ value(messageID) {
+ return Object.entries(conn.chats)
+ .filter(([_, { messages }]) => typeof messages === 'object')
+ .find(([_, { messages }]) =>
+ Object.entries(messages).find(([k, v]) => k === messageID || v.key?.id === messageID)
+ )?.[1].messages?.[messageID]
+ },
+ enumerable: true,
+ },
+ sendGroupV4Invite: {
+ /**
+ * sendGroupV4Invite
+ * @param {String} jid
+ * @param {*} participant
+ * @param {String} inviteCode
+ * @param {Number} inviteExpiration
+ * @param {String} groupName
+ * @param {String} caption
+ * @param {Buffer} jpegThumbnail
+ * @param {*} options
+ */
+ async value(
+ jid,
+ participant,
+ inviteCode,
+ inviteExpiration,
+ groupName = 'unknown subject',
+ caption = 'Invitation to join my WhatsApp group',
+ jpegThumbnail,
+ options = {}
+ ) {
+ const msg = proto.Message.fromObject({
+ groupInviteMessage: proto.GroupInviteMessage.fromObject({
+ inviteCode,
+ inviteExpiration: parseInt(inviteExpiration) || +new Date(new Date() + 3 * 86400000),
+ groupJid: jid,
+ groupName: (groupName ? groupName : await conn.getName(jid)) || null,
+ jpegThumbnail: Buffer.isBuffer(jpegThumbnail) ? jpegThumbnail : null,
+ caption,
+ }),
+ })
+ const message = generateWAMessageFromContent(participant, msg, options)
+ await conn.relayMessage(participant, message.message, {
+ messageId: message.key.id,
+ additionalAttributes: { ...options },
+ })
+ return message
+ },
+ enumerable: true,
+ },
+ processMessageStubType: {
+ /**
+ * to process MessageStubType
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} m
+ */
+ async value(m) {
+ if (!m.messageStubType) return
+ const chat = conn.decodeJid(
+ m.key.remoteJid || m.message?.senderKeyDistributionMessage?.groupId || ''
+ )
+ if (!chat || chat === 'status@broadcast') return
+ const emitGroupUpdate = update => {
+ ev.emit('groups.update', [{ id: chat, ...update }])
+ }
+ switch (m.messageStubType) {
+ case WAMessageStubType.REVOKE:
+ case WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
+ emitGroupUpdate({ revoke: m.messageStubParameters[0] })
+ break
+ case WAMessageStubType.GROUP_CHANGE_ICON:
+ emitGroupUpdate({ icon: m.messageStubParameters[0] })
+ break
+ default: {
+ console.log({
+ messageStubType: m.messageStubType,
+ messageStubParameters: m.messageStubParameters,
+ type: WAMessageStubType[m.messageStubType],
+ })
+ break
+ }
+ }
+ const isGroup = chat.endsWith('@g.us')
+ if (!isGroup) return
+ let chats = conn.chats[chat]
+ if (!chats) chats = conn.chats[chat] = { id: chat }
+ chats.isChats = true
+ const metadata = await conn.groupMetadata(chat).catch(_ => null)
+ if (!metadata) return
+ chats.subject = metadata.subject
+ chats.metadata = metadata
+ },
+ },
+ insertAllGroup: {
+ async value() {
+ const groups = (await conn.groupFetchAllParticipating().catch(_ => null)) || {}
+ for (const group in groups)
+ conn.chats[group] = {
+ ...(conn.chats[group] || {}),
+ id: group,
+ subject: groups[group].subject,
+ isChats: true,
+ metadata: groups[group],
+ }
+ return conn.chats
+ },
+ },
+ pushMessage: {
+ /**
+ * pushMessage
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo[]} m
+ */
+ async value(m) {
+ if (!m) return
+ if (!Array.isArray(m)) m = [m]
+ for (const message of m) {
+ try {
+ // if (!(message instanceof proto.WebMessageInfo)) continue // https://github.com/adiwajshing/Baileys/pull/696/commits/6a2cb5a4139d8eb0a75c4c4ea7ed52adc0aec20f
+ if (!message) continue
+ if (message.messageStubType && message.messageStubType != WAMessageStubType.CIPHERTEXT)
+ conn.processMessageStubType(message).catch(console.error)
+ const _mtype = Object.keys(message.message || {})
+ const mtype =
+ (!['senderKeyDistributionMessage', 'messageContextInfo'].includes(_mtype[0]) &&
+ _mtype[0]) ||
+ (_mtype.length >= 3 && _mtype[1] !== 'messageContextInfo' && _mtype[1]) ||
+ _mtype[_mtype.length - 1]
+ const chat = conn.decodeJid(
+ message.key.remoteJid || message.message?.senderKeyDistributionMessage?.groupId || ''
+ )
+ if (message.message?.[mtype]?.contextInfo?.quotedMessage) {
+ /**
+ * @type {import('@whiskeysockets/baileys').proto.IContextInfo}
+ */
+ let context = message.message[mtype].contextInfo
+ let participant = conn.decodeJid(context.participant)
+ const remoteJid = conn.decodeJid(context.remoteJid || participant)
+ /**
+ * @type {import('@whiskeysockets/baileys').proto.IMessage}
+ *
+ */
+ let quoted = message.message[mtype].contextInfo.quotedMessage
+ if (remoteJid && remoteJid !== 'status@broadcast' && quoted) {
+ let qMtype = Object.keys(quoted)[0]
+ if (qMtype == 'conversation') {
+ quoted.extendedTextMessage = { text: quoted[qMtype] }
+ delete quoted.conversation
+ qMtype = 'extendedTextMessage'
}
- m = generateWAMessageFromContent(jid, m, {
- ...options,
- userJid: conn.user.jid
- })
- await conn.relayMessage(jid, m.message, { messageId: m.key.id, additionalAttributes: { ...options } })
- return m
- },
- enumerable: true
- },
- fakeReply: {
- /**
- * Fake Replies
- * @param {String} jid
- * @param {String|Object} text
- * @param {String} fakeJid
- * @param {String} fakeText
- * @param {String} fakeGroupJid
- * @param {String} options
- */
- value(jid, text = '', fakeJid = this.user.jid, fakeText = '', fakeGroupJid, options) {
- return conn.reply(jid, text, { key: { fromMe: areJidsSameUser(fakeJid, conn.user.id), participant: fakeJid, ...(fakeGroupJid ? { remoteJid: fakeGroupJid } : {}) }, message: { conversation: fakeText }, ...options })
- }
- },
- downloadM: {
- /**
- * Download media message
- * @param {Object} m
- * @param {String} type
- * @param {fs.PathLike | fs.promises.FileHandle} saveToFile
- * @returns {Promise}
- */
- async value(m, type, saveToFile) {
- let filename
- if (!m || !(m.url || m.directPath)) return Buffer.alloc(0)
- const stream = await downloadContentFromMessage(m, type)
- let buffer = Buffer.from([])
- for await (const chunk of stream) {
- buffer = Buffer.concat([buffer, chunk])
+ if (!quoted[qMtype].contextInfo) quoted[qMtype].contextInfo = {}
+ quoted[qMtype].contextInfo.mentionedJid =
+ context.mentionedJid || quoted[qMtype].contextInfo.mentionedJid || []
+ const isGroup = remoteJid.endsWith('g.us')
+ if (isGroup && !participant) participant = remoteJid
+ const qM = {
+ key: {
+ remoteJid,
+ fromMe: areJidsSameUser(conn.user.jid, remoteJid),
+ id: context.stanzaId,
+ participant,
+ },
+ message: JSON.parse(JSON.stringify(quoted)),
+ ...(isGroup ? { participant } : {}),
}
- if (saveToFile) ({ filename } = await conn.getFile(buffer, true))
- return saveToFile && fs.existsSync(filename) ? filename : buffer
- },
- enumerable: true
- },
- parseMention: {
- /**
- * Parses string into mentionedJid(s)
- * @param {String} text
- * @returns {Array}
- */
- value(text = '') {
- return [...text.matchAll(/@([0-9]{5,16}|0)/g)].map(v => v[1] + '@s.whatsapp.net')
- },
- enumerable: true
- },
- getName: {
+ let qChats = conn.chats[participant]
+ if (!qChats)
+ qChats = conn.chats[participant] = { id: participant, isChats: !isGroup }
+ if (!qChats.messages) qChats.messages = {}
+ if (!qChats.messages[context.stanzaId] && !qM.key.fromMe)
+ qChats.messages[context.stanzaId] = qM
+ let qChatsMessages
+ if ((qChatsMessages = Object.entries(qChats.messages)).length > 40)
+ qChats.messages = Object.fromEntries(
+ qChatsMessages.slice(30, qChatsMessages.length)
+ ) // maybe avoid memory leak
+ }
+ }
+ if (!chat || chat === 'status@broadcast') continue
+ const isGroup = chat.endsWith('@g.us')
+ let chats = conn.chats[chat]
+ if (!chats) {
+ if (isGroup) await conn.insertAllGroup().catch(console.error)
+ chats = conn.chats[chat] = { id: chat, isChats: true, ...(conn.chats[chat] || {}) }
+ }
+ let metadata, sender
+ if (isGroup) {
+ if (!chats.subject || !chats.metadata) {
+ metadata = (await conn.groupMetadata(chat).catch(_ => ({}))) || {}
+ if (!chats.subject) chats.subject = metadata.subject || ''
+ if (!chats.metadata) chats.metadata = metadata
+ }
+ sender = conn.decodeJid(
+ (message.key?.fromMe && conn.user.id) ||
+ message.participant ||
+ message.key?.participant ||
+ chat ||
+ ''
+ )
+ if (sender !== chat) {
+ let chats = conn.chats[sender]
+ if (!chats) chats = conn.chats[sender] = { id: sender }
+ if (!chats.name) chats.name = message.pushName || chats.name || ''
+ }
+ } else if (!chats.name) chats.name = message.pushName || chats.name || ''
+ if (['senderKeyDistributionMessage', 'messageContextInfo'].includes(mtype)) continue
+ chats.isChats = true
+ if (!chats.messages) chats.messages = {}
+ const fromMe = message.key.fromMe || areJidsSameUser(sender || chat, conn.user.id)
+ if (
+ !['protocolMessage'].includes(mtype) &&
+ !fromMe &&
+ message.messageStubType != WAMessageStubType.CIPHERTEXT &&
+ message.message
+ ) {
+ delete message.message.messageContextInfo
+ delete message.message.senderKeyDistributionMessage
+ chats.messages[message.key.id] = JSON.parse(JSON.stringify(message, null, 2))
+ let chatsMessages
+ if ((chatsMessages = Object.entries(chats.messages)).length > 40)
+ chats.messages = Object.fromEntries(chatsMessages.slice(30, chatsMessages.length))
+ }
+ } catch (e) {
+ console.error(e)
+ }
+ }
+ },
+ },
+ serializeM: {
+ /**
+ * Serialize Message, so it easier to manipulate
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} m
+ */
+ value(m) {
+ return smsg(conn, m)
+ },
+ },
+ ...(typeof conn.chatRead !== 'function'
+ ? {
+ chatRead: {
/**
- * Get name from jid
+ * Read message
* @param {String} jid
- * @param {Boolean} withoutContact
- */
- value(jid = '', withoutContact = false) {
- jid = conn.decodeJid(jid)
- withoutContact = conn.withoutContact || withoutContact
- let v
- if (jid.endsWith('@g.us')) return new Promise(async (resolve) => {
- v = conn.chats[jid] || {}
- if (!(v.name || v.subject)) v = await conn.groupMetadata(jid) || {}
- resolve(v.name || v.subject || PhoneNumber('+' + jid.replace('@s.whatsapp.net', '')).getNumber('international'))
- })
- else v = jid === '0@s.whatsapp.net' ? {
- jid,
- vname: 'WhatsApp'
- } : areJidsSameUser(jid, conn.user.id) ?
- conn.user :
- (conn.chats[jid] || {})
- return (withoutContact ? '' : v.name) || v.subject || v.vname || v.notify || v.verifiedName || PhoneNumber('+' + jid.replace('@s.whatsapp.net', '')).getNumber('international')
- },
- enumerable: true
- },
- loadMessage: {
- /**
- *
- * @param {String} messageID
- * @returns {import('@whiskeysockets/baileys').proto.WebMessageInfo}
- */
- value(messageID) {
- return Object.entries(conn.chats)
- .filter(([_, { messages }]) => typeof messages === 'object')
- .find(([_, { messages }]) => Object.entries(messages)
- .find(([k, v]) => (k === messageID || v.key?.id === messageID)))
- ?.[1].messages?.[messageID]
- },
- enumerable: true
- },
- sendGroupV4Invite: {
- /**
- * sendGroupV4Invite
- * @param {String} jid
- * @param {*} participant
- * @param {String} inviteCode
- * @param {Number} inviteExpiration
- * @param {String} groupName
- * @param {String} caption
- * @param {Buffer} jpegThumbnail
- * @param {*} options
- */
- async value(jid, participant, inviteCode, inviteExpiration, groupName = 'unknown subject', caption = 'Invitation to join my WhatsApp group', jpegThumbnail, options = {}) {
- const msg = proto.Message.fromObject({
- groupInviteMessage: proto.GroupInviteMessage.fromObject({
- inviteCode,
- inviteExpiration: parseInt(inviteExpiration) || + new Date(new Date + (3 * 86400000)),
- groupJid: jid,
- groupName: (groupName ? groupName : await conn.getName(jid)) || null,
- jpegThumbnail: Buffer.isBuffer(jpegThumbnail) ? jpegThumbnail : null,
- caption
- })
- })
- const message = generateWAMessageFromContent(participant, msg, options)
- await conn.relayMessage(participant, message.message, { messageId: message.key.id, additionalAttributes: { ...options } })
- return message
- },
- enumerable: true
- },
- processMessageStubType: {
- /**
- * to process MessageStubType
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} m
+ * @param {String|undefined|null} participant
+ * @param {String} messageID
*/
- async value(m) {
- if (!m.messageStubType) return
- const chat = conn.decodeJid(m.key.remoteJid || m.message?.senderKeyDistributionMessage?.groupId || '')
- if (!chat || chat === 'status@broadcast') return
- const emitGroupUpdate = (update) => {
- ev.emit('groups.update', [{ id: chat, ...update }])
- }
- switch (m.messageStubType) {
- case WAMessageStubType.REVOKE:
- case WAMessageStubType.GROUP_CHANGE_INVITE_LINK:
- emitGroupUpdate({ revoke: m.messageStubParameters[0] })
- break
- case WAMessageStubType.GROUP_CHANGE_ICON:
- emitGroupUpdate({ icon: m.messageStubParameters[0] })
- break
- default: {
- console.log({
- messageStubType: m.messageStubType,
- messageStubParameters: m.messageStubParameters,
- type: WAMessageStubType[m.messageStubType]
- })
- break
- }
- }
- const isGroup = chat.endsWith('@g.us')
- if (!isGroup) return
- let chats = conn.chats[chat]
- if (!chats) chats = conn.chats[chat] = { id: chat }
- chats.isChats = true
- const metadata = await conn.groupMetadata(chat).catch(_ => null)
- if (!metadata) return
- chats.subject = metadata.subject
- chats.metadata = metadata
- }
- },
- insertAllGroup: {
- async value() {
- const groups = await conn.groupFetchAllParticipating().catch(_ => null) || {}
- for (const group in groups) conn.chats[group] = { ...(conn.chats[group] || {}), id: group, subject: groups[group].subject, isChats: true, metadata: groups[group] }
- return conn.chats
+ value(jid, participant = conn.user.jid, messageID) {
+ return conn.sendReadReceipt(jid, participant, [messageID])
},
- },
- pushMessage: {
- /**
- * pushMessage
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo[]} m
- */
- async value(m) {
- if (!m) return
- if (!Array.isArray(m)) m = [m]
- for (const message of m) {
- try {
- // if (!(message instanceof proto.WebMessageInfo)) continue // https://github.com/adiwajshing/Baileys/pull/696/commits/6a2cb5a4139d8eb0a75c4c4ea7ed52adc0aec20f
- if (!message) continue
- if (message.messageStubType && message.messageStubType != WAMessageStubType.CIPHERTEXT) conn.processMessageStubType(message).catch(console.error)
- const _mtype = Object.keys(message.message || {})
- const mtype = (!['senderKeyDistributionMessage', 'messageContextInfo'].includes(_mtype[0]) && _mtype[0]) ||
- (_mtype.length >= 3 && _mtype[1] !== 'messageContextInfo' && _mtype[1]) ||
- _mtype[_mtype.length - 1]
- const chat = conn.decodeJid(message.key.remoteJid || message.message?.senderKeyDistributionMessage?.groupId || '')
- if (message.message?.[mtype]?.contextInfo?.quotedMessage) {
- /**
- * @type {import('@whiskeysockets/baileys').proto.IContextInfo}
- */
- let context = message.message[mtype].contextInfo
- let participant = conn.decodeJid(context.participant)
- const remoteJid = conn.decodeJid(context.remoteJid || participant)
- /**
- * @type {import('@whiskeysockets/baileys').proto.IMessage}
- *
- */
- let quoted = message.message[mtype].contextInfo.quotedMessage
- if ((remoteJid && remoteJid !== 'status@broadcast') && quoted) {
- let qMtype = Object.keys(quoted)[0]
- if (qMtype == 'conversation') {
- quoted.extendedTextMessage = { text: quoted[qMtype] }
- delete quoted.conversation
- qMtype = 'extendedTextMessage'
- }
- if (!quoted[qMtype].contextInfo) quoted[qMtype].contextInfo = {}
- quoted[qMtype].contextInfo.mentionedJid = context.mentionedJid || quoted[qMtype].contextInfo.mentionedJid || []
- const isGroup = remoteJid.endsWith('g.us')
- if (isGroup && !participant) participant = remoteJid
- const qM = {
- key: {
- remoteJid,
- fromMe: areJidsSameUser(conn.user.jid, remoteJid),
- id: context.stanzaId,
- participant,
- },
- message: JSON.parse(JSON.stringify(quoted)),
- ...(isGroup ? { participant } : {})
- }
- let qChats = conn.chats[participant]
- if (!qChats) qChats = conn.chats[participant] = { id: participant, isChats: !isGroup }
- if (!qChats.messages) qChats.messages = {}
- if (!qChats.messages[context.stanzaId] && !qM.key.fromMe) qChats.messages[context.stanzaId] = qM
- let qChatsMessages
- if ((qChatsMessages = Object.entries(qChats.messages)).length > 40) qChats.messages = Object.fromEntries(qChatsMessages.slice(30, qChatsMessages.length)) // maybe avoid memory leak
- }
- }
- if (!chat || chat === 'status@broadcast') continue
- const isGroup = chat.endsWith('@g.us')
- let chats = conn.chats[chat]
- if (!chats) {
- if (isGroup) await conn.insertAllGroup().catch(console.error)
- chats = conn.chats[chat] = { id: chat, isChats: true, ...(conn.chats[chat] || {}) }
- }
- let metadata, sender
- if (isGroup) {
- if (!chats.subject || !chats.metadata) {
- metadata = await conn.groupMetadata(chat).catch(_ => ({})) || {}
- if (!chats.subject) chats.subject = metadata.subject || ''
- if (!chats.metadata) chats.metadata = metadata
- }
- sender = conn.decodeJid(message.key?.fromMe && conn.user.id || message.participant || message.key?.participant || chat || '')
- if (sender !== chat) {
- let chats = conn.chats[sender]
- if (!chats) chats = conn.chats[sender] = { id: sender }
- if (!chats.name) chats.name = message.pushName || chats.name || ''
- }
- } else if (!chats.name) chats.name = message.pushName || chats.name || ''
- if (['senderKeyDistributionMessage', 'messageContextInfo'].includes(mtype)) continue
- chats.isChats = true
- if (!chats.messages) chats.messages = {}
- const fromMe = message.key.fromMe || areJidsSameUser(sender || chat, conn.user.id)
- if (!['protocolMessage'].includes(mtype) && !fromMe && message.messageStubType != WAMessageStubType.CIPHERTEXT && message.message) {
- delete message.message.messageContextInfo
- delete message.message.senderKeyDistributionMessage
- chats.messages[message.key.id] = JSON.parse(JSON.stringify(message, null, 2))
- let chatsMessages
- if ((chatsMessages = Object.entries(chats.messages)).length > 40) chats.messages = Object.fromEntries(chatsMessages.slice(30, chatsMessages.length))
- }
- } catch (e) {
- console.error(e)
- }
- }
- }
- },
- serializeM: {
+ enumerable: true,
+ },
+ }
+ : {}),
+ ...(typeof conn.setStatus !== 'function'
+ ? {
+ setStatus: {
/**
- * Serialize Message, so it easier to manipulate
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} m
+ * setStatus bot
+ * @param {String} status
*/
- value(m) {
- return smsg(conn, m)
- }
- },
- ...(typeof conn.chatRead !== 'function' ? {
- chatRead: {
- /**
- * Read message
- * @param {String} jid
- * @param {String|undefined|null} participant
- * @param {String} messageID
- */
- value(jid, participant = conn.user.jid, messageID) {
- return conn.sendReadReceipt(jid, participant, [messageID])
+ value(status) {
+ return conn.query({
+ tag: 'iq',
+ attrs: {
+ to: S_WHATSAPP_NET,
+ type: 'set',
+ xmlns: 'status',
},
- enumerable: true
- }
- } : {}),
- ...(typeof conn.setStatus !== 'function' ? {
- setStatus: {
- /**
- * setStatus bot
- * @param {String} status
- */
- value(status) {
- return conn.query({
- tag: 'iq',
- attrs: {
- to: S_WHATSAPP_NET,
- type: 'set',
- xmlns: 'status',
- },
- content: [
- {
- tag: 'status',
- attrs: {},
- content: Buffer.from(status, 'utf-8')
- }
- ]
- })
- },
- enumerable: true
- }
- } : {})
- })
- if (sock.user?.id) sock.user.jid = sock.decodeJid(sock.user.id)
- store.bind(sock)
- return sock
+ content: [
+ {
+ tag: 'status',
+ attrs: {},
+ content: Buffer.from(status, 'utf-8'),
+ },
+ ],
+ })
+ },
+ enumerable: true,
+ },
+ }
+ : {}),
+ })
+ if (sock.user?.id) sock.user.jid = sock.decodeJid(sock.user.id)
+ store.bind(sock)
+ return sock
}
/**
* Serialize Message
- * @param {ReturnType} conn
- * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} m
- * @param {Boolean} hasParent
+ * @param {ReturnType} conn
+ * @param {import('@whiskeysockets/baileys').proto.WebMessageInfo} m
+ * @param {Boolean} hasParent
*/
export function smsg(conn, m, hasParent) {
- if (!m) return m
- /**
- * @type {import('@whiskeysockets/baileys').proto.WebMessageInfo}
- */
- let M = proto.WebMessageInfo
- m = M.fromObject(m)
- m.conn = conn
- let protocolMessageKey
- if (m.message) {
- if (m.mtype == 'protocolMessage' && m.msg.key) {
- protocolMessageKey = m.msg.key
- if (protocolMessageKey == 'status@broadcast') protocolMessageKey.remoteJid = m.chat
- if (!protocolMessageKey.participant || protocolMessageKey.participant == 'status_me') protocolMessageKey.participant = m.sender
- protocolMessageKey.fromMe = conn.decodeJid(protocolMessageKey.participant) === conn.decodeJid(conn.user.id)
- if (!protocolMessageKey.fromMe && protocolMessageKey.remoteJid === conn.decodeJid(conn.user.id)) protocolMessageKey.remoteJid = m.sender
- }
- if (m.quoted) if (!m.quoted.mediaMessage) delete m.quoted.download
+ if (!m) return m
+ /**
+ * @type {import('@whiskeysockets/baileys').proto.WebMessageInfo}
+ */
+ let M = proto.WebMessageInfo
+ m = M.fromObject(m)
+ m.conn = conn
+ let protocolMessageKey
+ if (m.message) {
+ if (m.mtype == 'protocolMessage' && m.msg.key) {
+ protocolMessageKey = m.msg.key
+ if (protocolMessageKey == 'status@broadcast') protocolMessageKey.remoteJid = m.chat
+ if (!protocolMessageKey.participant || protocolMessageKey.participant == 'status_me')
+ protocolMessageKey.participant = m.sender
+ protocolMessageKey.fromMe =
+ conn.decodeJid(protocolMessageKey.participant) === conn.decodeJid(conn.user.id)
+ if (
+ !protocolMessageKey.fromMe &&
+ protocolMessageKey.remoteJid === conn.decodeJid(conn.user.id)
+ )
+ protocolMessageKey.remoteJid = m.sender
}
- if (!m.mediaMessage) delete m.download
+ if (m.quoted) if (!m.quoted.mediaMessage) delete m.quoted.download
+ }
+ if (!m.mediaMessage) delete m.download
- try {
- if (protocolMessageKey && m.mtype == 'protocolMessage') conn.ev.emit('message.delete', protocolMessageKey)
- } catch (e) {
- console.error(e)
- }
- return m
+ try {
+ if (protocolMessageKey && m.mtype == 'protocolMessage')
+ conn.ev.emit('message.delete', protocolMessageKey)
+ } catch (e) {
+ console.error(e)
+ }
+ return m
}
// https://github.com/Nurutomo/wabot-aq/issues/490
export function serialize() {
- const MediaType = ['imageMessage', 'videoMessage', 'audioMessage', 'stickerMessage', 'documentMessage']
- return Object.defineProperties(proto.WebMessageInfo.prototype, {
- conn: {
- value: undefined,
- enumerable: false,
- writable: true
- },
- id: {
- get() {
- return this.key?.id
- }
- },
- isBaileys: {
- get() {
- return this.id?.length === 16 || this.id?.startsWith('3EB0') && this.id?.length === 12 || false
- }
- },
- chat: {
- get() {
- const senderKeyDistributionMessage = this.message?.senderKeyDistributionMessage?.groupId
- return (
- this.key?.remoteJid ||
- (senderKeyDistributionMessage &&
- senderKeyDistributionMessage !== 'status@broadcast'
- ) || ''
- ).decodeJid()
- }
- },
- isGroup: {
- get() {
- return this.chat.endsWith('@g.us')
- },
- enumerable: true
- },
- sender: {
- get() {
- return this.conn?.decodeJid(this.key?.fromMe && this.conn?.user.id || this.participant || this.key.participant || this.chat || '')
- },
- enumerable: true
- },
- fromMe: {
- get() {
- return this.key?.fromMe || areJidsSameUser(this.conn?.user.id, this.sender) || false
- }
- },
- mtype: {
- get() {
- if (!this.message) return ''
- const type = Object.keys(this.message)
- return (!['senderKeyDistributionMessage', 'messageContextInfo'].includes(type[0]) && type[0]) || // Sometimes message in the front
- (type.length >= 3 && type[1] !== 'messageContextInfo' && type[1]) || // Sometimes message in midle if mtype length is greater than or equal to 3
- type[type.length - 1] // common case
+ const MediaType = [
+ 'imageMessage',
+ 'videoMessage',
+ 'audioMessage',
+ 'stickerMessage',
+ 'documentMessage',
+ ]
+ return Object.defineProperties(proto.WebMessageInfo.prototype, {
+ conn: {
+ value: undefined,
+ enumerable: false,
+ writable: true,
+ },
+ id: {
+ get() {
+ return this.key?.id
+ },
+ },
+ isBaileys: {
+ get() {
+ return (
+ this.id?.length === 16 || (this.id?.startsWith('3EB0') && this.id?.length === 12) || false
+ )
+ },
+ },
+ chat: {
+ get() {
+ const senderKeyDistributionMessage = this.message?.senderKeyDistributionMessage?.groupId
+ return (
+ this.key?.remoteJid ||
+ (senderKeyDistributionMessage && senderKeyDistributionMessage !== 'status@broadcast') ||
+ ''
+ ).decodeJid()
+ },
+ },
+ isGroup: {
+ get() {
+ return this.chat.endsWith('@g.us')
+ },
+ enumerable: true,
+ },
+ sender: {
+ get() {
+ return this.conn?.decodeJid(
+ (this.key?.fromMe && this.conn?.user.id) ||
+ this.participant ||
+ this.key.participant ||
+ this.chat ||
+ ''
+ )
+ },
+ enumerable: true,
+ },
+ fromMe: {
+ get() {
+ return this.key?.fromMe || areJidsSameUser(this.conn?.user.id, this.sender) || false
+ },
+ },
+ mtype: {
+ get() {
+ if (!this.message) return ''
+ const type = Object.keys(this.message)
+ return (
+ (!['senderKeyDistributionMessage', 'messageContextInfo'].includes(type[0]) && type[0]) || // Sometimes message in the front
+ (type.length >= 3 && type[1] !== 'messageContextInfo' && type[1]) || // Sometimes message in midle if mtype length is greater than or equal to 3
+ type[type.length - 1]
+ ) // common case
+ },
+ enumerable: true,
+ },
+ msg: {
+ get() {
+ if (!this.message) return null
+ return this.message[this.mtype]
+ },
+ },
+ mediaMessage: {
+ get() {
+ if (!this.message) return null
+ const Message =
+ (this.msg?.url || this.msg?.directPath
+ ? { ...this.message }
+ : extractMessageContent(this.message)) || null
+ if (!Message) return null
+ const mtype = Object.keys(Message)[0]
+ return MediaType.includes(mtype) ? Message : null
+ },
+ enumerable: true,
+ },
+ mediaType: {
+ get() {
+ let message
+ if (!(message = this.mediaMessage)) return null
+ return Object.keys(message)[0]
+ },
+ enumerable: true,
+ },
+ quoted: {
+ get() {
+ /**
+ * @type {ReturnType}
+ */
+ const self = this
+ const msg = self.msg
+ const contextInfo = msg?.contextInfo
+ const quoted = contextInfo?.quotedMessage
+ if (!msg || !contextInfo || !quoted) return null
+ const type = Object.keys(quoted)[0]
+ let q = quoted[type]
+ const text = typeof q === 'string' ? q : q.text
+ return Object.defineProperties(
+ JSON.parse(JSON.stringify(typeof q === 'string' ? { text: q } : q)),
+ {
+ mtype: {
+ get() {
+ return type
+ },
+ enumerable: true,
},
- enumerable: true
- },
- msg: {
- get() {
- if (!this.message) return null
- return this.message[this.mtype]
- }
- },
- mediaMessage: {
- get() {
- if (!this.message) return null
- const Message = ((this.msg?.url || this.msg?.directPath) ? { ...this.message } : extractMessageContent(this.message)) || null
+ mediaMessage: {
+ get() {
+ const Message =
+ (q.url || q.directPath ? { ...quoted } : extractMessageContent(quoted)) || null
if (!Message) return null
const mtype = Object.keys(Message)[0]
return MediaType.includes(mtype) ? Message : null
+ },
+ enumerable: true,
},
- enumerable: true
- },
- mediaType: {
- get() {
+ mediaType: {
+ get() {
let message
if (!(message = this.mediaMessage)) return null
return Object.keys(message)[0]
+ },
+ enumerable: true,
},
- enumerable: true,
- },
- quoted: {
- get() {
- /**
- * @type {ReturnType}
- */
- const self = this
- const msg = self.msg
- const contextInfo = msg?.contextInfo
- const quoted = contextInfo?.quotedMessage
- if (!msg || !contextInfo || !quoted) return null
- const type = Object.keys(quoted)[0]
- let q = quoted[type]
- const text = typeof q === 'string' ? q : q.text
- return Object.defineProperties(JSON.parse(JSON.stringify(typeof q === 'string' ? { text: q } : q)), {
- mtype: {
- get() {
- return type
- },
- enumerable: true
- },
- mediaMessage: {
- get() {
- const Message = ((q.url || q.directPath) ? { ...quoted } : extractMessageContent(quoted)) || null
- if (!Message) return null
- const mtype = Object.keys(Message)[0]
- return MediaType.includes(mtype) ? Message : null
- },
- enumerable: true
- },
- mediaType: {
- get() {
- let message
- if (!(message = this.mediaMessage)) return null
- return Object.keys(message)[0]
- },
- enumerable: true,
- },
- id: {
- get() {
- return contextInfo.stanzaId
- },
- enumerable: true
- },
- chat: {
- get() {
- return contextInfo.remoteJid || self.chat
- },
- enumerable: true
- },
- isBaileys: {
- get() {
- return this.id?.length === 16 || this.id?.startsWith('3EB0') && this.id.length === 12 || false
- },
- enumerable: true
- },
- sender: {
- get() {
- return (contextInfo.participant || this.chat || '').decodeJid()
- },
- enumerable: true
- },
- fromMe: {
- get() {
- return areJidsSameUser(this.sender, self.conn?.user.jid)
- },
- enumerable: true,
- },
- text: {
- get() {
- return text || this.caption || this.contentText || this.selectedDisplayText || ''
- },
- enumerable: true
- },
- mentionedJid: {
- get() {
- return q.contextInfo?.mentionedJid || self.getQuotedObj()?.mentionedJid || []
- },
- enumerable: true
- },
- name: {
- get() {
- const sender = this.sender
- return sender ? self.conn?.getName(sender) : null
- },
- enumerable: true
-
- },
- vM: {
- get() {
- return proto.WebMessageInfo.fromObject({
- key: {
- fromMe: this.fromMe,
- remoteJid: this.chat,
- id: this.id
- },
- message: quoted,
- ...(self.isGroup ? { participant: this.sender } : {})
- })
- }
- },
- fakeObj: {
- get() {
- return this.vM
- }
- },
- download: {
- value(saveToFile = false) {
- const mtype = this.mediaType
- return self.conn?.downloadM(this.mediaMessage[mtype], mtype.replace(/message/i, ''), saveToFile)
- },
- enumerable: true,
- configurable: true,
- },
- reply: {
- /**
- * Reply to quoted message
- * @param {String|Object} text
- * @param {String|false} chatId
- * @param {Object} options
- */
- value(text, chatId, options) {
- return self.conn?.reply(chatId ? chatId : this.chat, text, this.vM, options)
- },
- enumerable: true,
- },
- copy: {
- /**
- * Copy quoted message
- */
- value() {
- const M = proto.WebMessageInfo
- return smsg(conn, M.fromObject(M.toObject(this.vM)))
- },
- enumerable: true,
- },
- forward: {
- /**
- * Forward quoted message
- * @param {String} jid
- * @param {Boolean} forceForward
- */
- value(jid, force = false, options) {
- return self.conn?.sendMessage(jid, {
- forward: this.vM, force, ...options
- }, { ...options })
- },
- enumerable: true,
- },
- copyNForward: {
- /**
- * Exact Forward quoted message
- * @param {String} jid
- * @param {Boolean|Number} forceForward
- * @param {Object} options
- */
- value(jid, forceForward = false, options) {
- return self.conn?.copyNForward(jid, this.vM, forceForward, options)
- },
- enumerable: true,
-
- },
- cMod: {
- /**
- * Modify quoted Message
- * @param {String} jid
- * @param {String} text
- * @param {String} sender
- * @param {Object} options
- */
- value(jid, text = '', sender = this.sender, options = {}) {
- return self.conn?.cMod(jid, this.vM, text, sender, options)
- },
- enumerable: true,
-
- },
- delete: {
- /**
- * Delete quoted message
- */
- value() {
- return self.conn?.sendMessage(this.chat, { delete: this.vM.key })
- },
- enumerable: true,
-
- },
- //react
- react: {
- value(text) {
- return self.conn?.sendMessage(this.chat, {
- react: {
- text,
- key: this.vM.key
- }
- })
- },
- enumerable: true,
- }
- //
- })
+ id: {
+ get() {
+ return contextInfo.stanzaId
+ },
+ enumerable: true,
+ },
+ chat: {
+ get() {
+ return contextInfo.remoteJid || self.chat
+ },
+ enumerable: true,
+ },
+ isBaileys: {
+ get() {
+ return (
+ this.id?.length === 16 ||
+ (this.id?.startsWith('3EB0') && this.id.length === 12) ||
+ false
+ )
+ },
+ enumerable: true,
+ },
+ sender: {
+ get() {
+ return (contextInfo.participant || this.chat || '').decodeJid()
+ },
+ enumerable: true,
+ },
+ fromMe: {
+ get() {
+ return areJidsSameUser(this.sender, self.conn?.user.jid)
+ },
+ enumerable: true,
},
- enumerable: true
- },
- _text: {
- value: null,
- writable: true,
- },
- text: {
- get() {
- const msg = this.msg
- const text = (typeof msg === 'string' ? msg : msg?.text) || msg?.caption || msg?.contentText || ''
- return typeof this._text === 'string' ? this._text : '' || (typeof text === 'string' ? text : (
- text?.selectedDisplayText ||
- text?.hydratedTemplate?.hydratedContentText ||
- text
- )) || ''
+ text: {
+ get() {
+ return text || this.caption || this.contentText || this.selectedDisplayText || ''
+ },
+ enumerable: true,
},
- set(str) {
- return this._text = str
+ mentionedJid: {
+ get() {
+ return q.contextInfo?.mentionedJid || self.getQuotedObj()?.mentionedJid || []
+ },
+ enumerable: true,
},
- enumerable: true
- },
- mentionedJid: {
- get() {
- return this.msg?.contextInfo?.mentionedJid?.length && this.msg.contextInfo.mentionedJid || []
+ name: {
+ get() {
+ const sender = this.sender
+ return sender ? self.conn?.getName(sender) : null
+ },
+ enumerable: true,
},
- enumerable: true
- },
- name: {
- get() {
- return !nullish(this.pushName) && this.pushName || this.conn?.getName(this.sender)
+ vM: {
+ get() {
+ return proto.WebMessageInfo.fromObject({
+ key: {
+ fromMe: this.fromMe,
+ remoteJid: this.chat,
+ id: this.id,
+ },
+ message: quoted,
+ ...(self.isGroup ? { participant: this.sender } : {}),
+ })
+ },
+ },
+ fakeObj: {
+ get() {
+ return this.vM
+ },
},
- enumerable: true
- },
- download: {
- value(saveToFile = false) {
+ download: {
+ value(saveToFile = false) {
const mtype = this.mediaType
- return this.conn?.downloadM(this.mediaMessage[mtype], mtype.replace(/message/i, ''), saveToFile)
+ return self.conn?.downloadM(
+ this.mediaMessage[mtype],
+ mtype.replace(/message/i, ''),
+ saveToFile
+ )
+ },
+ enumerable: true,
+ configurable: true,
},
- enumerable: true,
- configurable: true
- },
- reply: {
- value(text, chatId, options) {
- return this.conn?.reply(chatId ? chatId : this.chat, text, this, options)
- }
- },
- copy: {
- value() {
- const M = proto.WebMessageInfo
- return smsg(this.conn, M.fromObject(M.toObject(this)))
+ reply: {
+ /**
+ * Reply to quoted message
+ * @param {String|Object} text
+ * @param {String|false} chatId
+ * @param {Object} options
+ */
+ value(text, chatId, options) {
+ return self.conn?.reply(chatId ? chatId : this.chat, text, this.vM, options)
+ },
+ enumerable: true,
},
- enumerable: true
- },
- forward: {
- value(jid, force = false, options = {}) {
- return this.conn?.sendMessage(jid, {
- forward: this, force, ...options
- }, { ...options })
+ copy: {
+ /**
+ * Copy quoted message
+ */
+ value() {
+ const M = proto.WebMessageInfo
+ return smsg(conn, M.fromObject(M.toObject(this.vM)))
+ },
+ enumerable: true,
},
- enumerable: true
- },
- copyNForward: {
- value(jid, forceForward = false, options = {}) {
- return this.conn?.copyNForward(jid, this, forceForward, options)
+ forward: {
+ /**
+ * Forward quoted message
+ * @param {String} jid
+ * @param {Boolean} forceForward
+ */
+ value(jid, force = false, options) {
+ return self.conn?.sendMessage(
+ jid,
+ {
+ forward: this.vM,
+ force,
+ ...options,
+ },
+ { ...options }
+ )
+ },
+ enumerable: true,
},
- enumerable: true
- },
- cMod: {
- value(jid, text = '', sender = this.sender, options = {}) {
- return this.conn?.cMod(jid, this, text, sender, options)
+ copyNForward: {
+ /**
+ * Exact Forward quoted message
+ * @param {String} jid
+ * @param {Boolean|Number} forceForward
+ * @param {Object} options
+ */
+ value(jid, forceForward = false, options) {
+ return self.conn?.copyNForward(jid, this.vM, forceForward, options)
+ },
+ enumerable: true,
},
- enumerable: true
- },
- getQuotedObj: {
- value() {
- if (!this.quoted.id) return null
- const q = proto.WebMessageInfo.fromObject(this.conn?.loadMessage(this.quoted.id) || this.quoted.vM)
- return smsg(this.conn, q)
+ cMod: {
+ /**
+ * Modify quoted Message
+ * @param {String} jid
+ * @param {String} text
+ * @param {String} sender
+ * @param {Object} options
+ */
+ value(jid, text = '', sender = this.sender, options = {}) {
+ return self.conn?.cMod(jid, this.vM, text, sender, options)
+ },
+ enumerable: true,
},
- enumerable: true
- },
- getQuotedMessage: {
- get() {
- return this.getQuotedObj
- }
- },
- delete: {
- value() {
- return this.conn?.sendMessage(this.chat, { delete: this.key })
+ delete: {
+ /**
+ * Delete quoted message
+ */
+ value() {
+ return self.conn?.sendMessage(this.chat, { delete: this.vM.key })
+ },
+ enumerable: true,
},
- enumerable: true
- },
- //react
- react: {
- value(text) {
- return this.conn?.sendMessage(this.chat, {
- react: {
- text,
- key: this.key
- }
+ //react
+ react: {
+ value(text) {
+ return self.conn?.sendMessage(this.chat, {
+ react: {
+ text,
+ key: this.vM.key,
+ },
})
+ },
+ enumerable: true,
},
- enumerable: true
- }
- //
- })
+ //
+ }
+ )
+ },
+ enumerable: true,
+ },
+ _text: {
+ value: null,
+ writable: true,
+ },
+ text: {
+ get() {
+ const msg = this.msg
+ const text =
+ (typeof msg === 'string' ? msg : msg?.text) || msg?.caption || msg?.contentText || ''
+ return typeof this._text === 'string'
+ ? this._text
+ : '' ||
+ (typeof text === 'string'
+ ? text
+ : text?.selectedDisplayText ||
+ text?.hydratedTemplate?.hydratedContentText ||
+ text) ||
+ ''
+ },
+ set(str) {
+ return (this._text = str)
+ },
+ enumerable: true,
+ },
+ mentionedJid: {
+ get() {
+ return (
+ (this.msg?.contextInfo?.mentionedJid?.length && this.msg.contextInfo.mentionedJid) || []
+ )
+ },
+ enumerable: true,
+ },
+ name: {
+ get() {
+ return (!nullish(this.pushName) && this.pushName) || this.conn?.getName(this.sender)
+ },
+ enumerable: true,
+ },
+ download: {
+ value(saveToFile = false) {
+ const mtype = this.mediaType
+ return this.conn?.downloadM(
+ this.mediaMessage[mtype],
+ mtype.replace(/message/i, ''),
+ saveToFile
+ )
+ },
+ enumerable: true,
+ configurable: true,
+ },
+ reply: {
+ value(text, chatId, options) {
+ return this.conn?.reply(chatId ? chatId : this.chat, text, this, options)
+ },
+ },
+ copy: {
+ value() {
+ const M = proto.WebMessageInfo
+ return smsg(this.conn, M.fromObject(M.toObject(this)))
+ },
+ enumerable: true,
+ },
+ forward: {
+ value(jid, force = false, options = {}) {
+ return this.conn?.sendMessage(
+ jid,
+ {
+ forward: this,
+ force,
+ ...options,
+ },
+ { ...options }
+ )
+ },
+ enumerable: true,
+ },
+ copyNForward: {
+ value(jid, forceForward = false, options = {}) {
+ return this.conn?.copyNForward(jid, this, forceForward, options)
+ },
+ enumerable: true,
+ },
+ cMod: {
+ value(jid, text = '', sender = this.sender, options = {}) {
+ return this.conn?.cMod(jid, this, text, sender, options)
+ },
+ enumerable: true,
+ },
+ getQuotedObj: {
+ value() {
+ if (!this.quoted.id) return null
+ const q = proto.WebMessageInfo.fromObject(
+ this.conn?.loadMessage(this.quoted.id) || this.quoted.vM
+ )
+ return smsg(this.conn, q)
+ },
+ enumerable: true,
+ },
+ getQuotedMessage: {
+ get() {
+ return this.getQuotedObj
+ },
+ },
+ delete: {
+ value() {
+ return this.conn?.sendMessage(this.chat, { delete: this.key })
+ },
+ enumerable: true,
+ },
+ //react
+ react: {
+ value(text) {
+ return this.conn?.sendMessage(this.chat, {
+ react: {
+ text,
+ key: this.key,
+ },
+ })
+ },
+ enumerable: true,
+ },
+ //
+ })
}
export function logic(check, inp, out) {
- if (inp.length !== out.length) throw new Error('Input and Output must have same length')
- for (let i in inp) if (util.isDeepStrictEqual(check, inp[i])) return out[i]
- return null
+ if (inp.length !== out.length) throw new Error('Input and Output must have same length')
+ for (let i in inp) if (util.isDeepStrictEqual(check, inp[i])) return out[i]
+ return null
}
export function protoType() {
- Buffer.prototype.toArrayBuffer = function toArrayBufferV2() {
- const ab = new ArrayBuffer(this.length);
- const view = new Uint8Array(ab);
- for (let i = 0; i < this.length; ++i) {
- view[i] = this[i];
- }
- return ab;
- }
- /**
- * @returns {ArrayBuffer}
- */
- Buffer.prototype.toArrayBufferV2 = function toArrayBuffer() {
- return this.buffer.slice(this.byteOffset, this.byteOffset + this.byteLength)
- }
- /**
- * @returns {Buffer}
- */
- ArrayBuffer.prototype.toBuffer = function toBuffer() {
- return Buffer.from(new Uint8Array(this))
+ Buffer.prototype.toArrayBuffer = function toArrayBufferV2() {
+ const ab = new ArrayBuffer(this.length)
+ const view = new Uint8Array(ab)
+ for (let i = 0; i < this.length; ++i) {
+ view[i] = this[i]
}
- // /**
- // * @returns {String}
- // */
- // Buffer.prototype.toUtilFormat = ArrayBuffer.prototype.toUtilFormat = Object.prototype.toUtilFormat = Array.prototype.toUtilFormat = function toUtilFormat() {
- // return util.format(this)
- // }
- Uint8Array.prototype.getFileType = ArrayBuffer.prototype.getFileType = Buffer.prototype.getFileType = async function getFileType() {
+ return ab
+ }
+ /**
+ * @returns {ArrayBuffer}
+ */
+ Buffer.prototype.toArrayBufferV2 = function toArrayBuffer() {
+ return this.buffer.slice(this.byteOffset, this.byteOffset + this.byteLength)
+ }
+ /**
+ * @returns {Buffer}
+ */
+ ArrayBuffer.prototype.toBuffer = function toBuffer() {
+ return Buffer.from(new Uint8Array(this))
+ }
+ // /**
+ // * @returns {String}
+ // */
+ // Buffer.prototype.toUtilFormat = ArrayBuffer.prototype.toUtilFormat = Object.prototype.toUtilFormat = Array.prototype.toUtilFormat = function toUtilFormat() {
+ // return util.format(this)
+ // }
+ Uint8Array.prototype.getFileType =
+ ArrayBuffer.prototype.getFileType =
+ Buffer.prototype.getFileType =
+ async function getFileType() {
return await fileTypeFromBuffer(this)
- }
- /**
- * @returns {Boolean}
- */
- String.prototype.isNumber = Number.prototype.isNumber = isNumber
- /**
- *
- * @returns {String}
- */
- String.prototype.capitalize = function capitalize() {
- return this.charAt(0).toUpperCase() + this.slice(1, this.length)
- }
- /**
- * @returns {String}
- */
- String.prototype.capitalizeV2 = function capitalizeV2() {
- const str = this.split(' ')
- return str.map(v => v.capitalize()).join(' ')
- }
- String.prototype.decodeJid = function decodeJid() {
- if (/:\d+@/gi.test(this)) {
- const decode = jidDecode(this) || {}
- return (decode.user && decode.server && decode.user + '@' + decode.server || this).trim()
- } else return this.trim()
- }
- /**
- * number must be milliseconds
- * @returns {string}
- */
- Number.prototype.toTimeString = function toTimeString() {
- // const milliseconds = this % 1000
- const seconds = Math.floor((this / 1000) % 60)
- const minutes = Math.floor((this / (60 * 1000)) % 60)
- const hours = Math.floor((this / (60 * 60 * 1000)) % 24)
- const days = Math.floor((this / (24 * 60 * 60 * 1000)))
- return (
- (days ? `${days} day(s) ` : '') +
- (hours ? `${hours} hour(s) ` : '') +
- (minutes ? `${minutes} minute(s) ` : '') +
- (seconds ? `${seconds} second(s)` : '')
- ).trim()
- }
- Number.prototype.getRandom = String.prototype.getRandom = Array.prototype.getRandom = getRandom
+ }
+ /**
+ * @returns {Boolean}
+ */
+ String.prototype.isNumber = Number.prototype.isNumber = isNumber
+ /**
+ *
+ * @returns {String}
+ */
+ String.prototype.capitalize = function capitalize() {
+ return this.charAt(0).toUpperCase() + this.slice(1, this.length)
+ }
+ /**
+ * @returns {String}
+ */
+ String.prototype.capitalizeV2 = function capitalizeV2() {
+ const str = this.split(' ')
+ return str.map(v => v.capitalize()).join(' ')
+ }
+ String.prototype.decodeJid = function decodeJid() {
+ if (/:\d+@/gi.test(this)) {
+ const decode = jidDecode(this) || {}
+ return ((decode.user && decode.server && decode.user + '@' + decode.server) || this).trim()
+ } else return this.trim()
+ }
+ /**
+ * number must be milliseconds
+ * @returns {string}
+ */
+ Number.prototype.toTimeString = function toTimeString() {
+ // const milliseconds = this % 1000
+ const seconds = Math.floor((this / 1000) % 60)
+ const minutes = Math.floor((this / (60 * 1000)) % 60)
+ const hours = Math.floor((this / (60 * 60 * 1000)) % 24)
+ const days = Math.floor(this / (24 * 60 * 60 * 1000))
+ return (
+ (days ? `${days} day(s) ` : '') +
+ (hours ? `${hours} hour(s) ` : '') +
+ (minutes ? `${minutes} minute(s) ` : '') +
+ (seconds ? `${seconds} second(s)` : '')
+ ).trim()
+ }
+ Number.prototype.getRandom = String.prototype.getRandom = Array.prototype.getRandom = getRandom
}
-
function isNumber() {
- const int = parseInt(this)
- return typeof int === 'number' && !isNaN(int)
+ const int = parseInt(this)
+ return typeof int === 'number' && !isNaN(int)
}
function getRandom() {
- if (Array.isArray(this) || this instanceof String) return this[Math.floor(Math.random() * this.length)]
- return Math.floor(Math.random() * this)
+ if (Array.isArray(this) || this instanceof String)
+ return this[Math.floor(Math.random() * this.length)]
+ return Math.floor(Math.random() * this)
}
-
/**
* ??
* @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
* @returns {boolean}
*/
function nullish(args) {
- return !(args !== null && args !== undefined)
+ return !(args !== null && args !== undefined)
}
-
// TypeError: Cannot read properties of null (reading 'user')
// at WebMessageInfo.get (file:///home/container/lib/simple.js:888:70)
// at Object.value (file:///home/container/lib/simple.js:731:61)
// at Object.handler (file:///home/container/handler.js?update=1646537086773:18:10)
// at EventEmitter.emit (node:events:532:35)
// at Object.all (file:///home/container/plugins/_templateResponse.js?update=1646538543307:79:13)
-// at async Object.handler (file:///home/container/handler.js?update=1646537086773:346:21)
+// at async Object.handler (file:///home/container/handler.js?update=1646537086773:346:21)
\ No newline at end of file
diff --git a/lib/uploadimage.js b/lib/uploadimage.js
new file mode 100644
index 00000000..e69de29b
diff --git a/lib/welcome.js b/lib/welcome.js
index 993dfcb1..6babc0e9 100644
--- a/lib/welcome.js
+++ b/lib/welcome.js
@@ -278,7 +278,7 @@ function WelcomeLeave(Profile, Name, Text) {
function getCurrentTime() {
const options = {
- timeZone: 'Asia/Kolkata',
+ timeZone: 'Africa/Lagos',
year: 'numeric',
month: 'long',
day: 'numeric',
diff --git a/package.json b/package.json
deleted file mode 100644
index e5e5bea7..00000000
--- a/package.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
- "name": "gurubot",
- "version": "2.0.0",
- "description": "Advanced WhatsApp Bot",
- "main": "index.js",
- "type": "module",
- "directories": {
- "lib": "lib",
- "src": "src",
- "plugins": "plugins"
- },
- "scripts": {
- "start": "node index.js",
- "test": "node test.js"
- },
- "keywords": [
- "termux-whatsapp-bot",
- "whatsapp-bot",
- "whatsapp",
- "js-whatsapp",
- "whatsapp",
- "guru-bot",
- "GURU-bot-md",
- "multi-device",
- "MD",
- "baileys-md"
- ],
- "homepage": "https://github.com/Guru322/GURU-BOT",
- "author": {
- "name": "GURU"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/Guru322/GURU-BOT.git"
- },
- "bugs": {
- "url": "https://github.com/Guru322/GURU-BOT/issues"
- },
- "license": "Apache License 2.0",
- "dependencies": {
- "@adiwajshing/keyed-db": "^0.2.4",
- "@bochilteam/scraper": "^4.0.22-alpha.0",
- "@google/generative-ai": "0.1.3",
- "@shineiichijo/marika": "^2.0.6",
- "@vitalets/google-translate-api": "^9.2.0",
- "@whiskeysockets/baileys": "npm:@whiskeysockets/baileys",
- "@xct007/frieren-scraper": "*",
- "@xct007/tiktok-scraper": "*",
- "acrcloud": "^1.4.0",
- "api-dylux": "^1.6.9",
- "aptoide-scraper": "^1.0.1",
- "awesome-phonenumber": "^3.4.0",
- "axios": "^1.4.0",
- "mumaker": "latest",
- "canvacord": "^5.4.8",
- "cfonts": "^3.1.1",
- "chalk": "^5.1.0",
- "cheerio": "^1.0.0-rc.12",
- "chess.js": "*",
- "colors": "1.4.0",
- "didyoumean": "^1.2.2",
- "dotenv": "^16.1.4",
- "emoji-api": "^2.0.1",
- "express": "^4.18.1",
- "fb-downloader-scrapper": "^1.0.1",
- "fg-ig": "^0.0.2",
- "file-type": "^18.0.0",
- "fluent-ffmpeg": "^2.1.2",
- "formdata-node": "^5.0.0",
- "g-i-s": "^2.1.6",
- "google-it": "^1.6.4",
- "heroku-client": "^3.1.0",
- "hispamemes": "^1.0.7",
- "human-readable": "^0.2.1",
- "hxz-api": "^1.0.1",
- "imagemaker.js": "*",
- "imgur": "2.3.0",
- "instagram-url-direct": "^1.0.12",
- "jimp": "^0.16.1",
- "jsdom": "^20.0.1",
- "knights-canvas": "^1.3.7-a",
- "link-preview-js": "^3.0.0",
- "lodash": "^4.17.21",
- "lowdb": "^3.0.0",
- "megajs": "^1.1.4",
- "moment-timezone": "^0.5.37",
- "mongoose": "^7.4.1",
- "node-fetch": "^3.3.1",
- "node-gtts": "^2.0.2",
- "node-webpmux": "^3.1.3",
- "openai": "^3.2.1",
- "pdfkit": "^0.13.0",
- "perf_hooks": "^0.0.1",
- "pino": "^8.6.1",
- "pino-pretty": "^9.1.1",
- "qrcode": "^1.5.1",
- "qrcode-terminal": "^0.12.0",
- "readline": "^1.3.0",
- "sagiri": "*",
- "sharp": "^0.32.2",
- "similarity": "^1.2.1",
- "socket.io": "^4.5.2",
- "syntax-error": "^1.4.0",
- "terminal-image": "^2.0.0",
- "truesearch": "^1.0.2",
- "url-regex-safe": "^3.0.0",
- "wa-sticker-formatter": "^4.3.2",
- "xfarr-api": "^1.0.3",
- "yargs": "^17.6.0",
- "youtube-yts": "^2.0.0",
- "youtubedl-core": "npm:@distube/ytdl-core"
- },
- "overrides": {
- "cache-manager": "5.2.2"
- }
- }
diff --git a/plugins/1.js b/plugins/1.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/10.js b/plugins/10.js
new file mode 100644
index 00000000..397d8559
--- /dev/null
+++ b/plugins/10.js
@@ -0,0 +1,15 @@
+let handler = async (m, { conn, text }) => {
+ if (!text) throw `Enter Text For Bot's New Bio`
+ try {
+ await conn.updateProfileStatus(text).catch(_ => _)
+ conn.reply(m.chat, 'Success Changing Bio Bot', m)
+} catch {
+ throw 'Well, Error Sis...'
+ }
+}
+handler.help = ['setbotbio ']
+handler.tags = ['owner']
+handler.command = /^setbiobot|setbotbio$/i
+handler.owner = true
+
+export default handler
\ No newline at end of file
diff --git a/plugins/11.js b/plugins/11.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/2.js b/plugins/2.js
new file mode 100644
index 00000000..94dee815
--- /dev/null
+++ b/plugins/2.js
@@ -0,0 +1,16 @@
+let handler = async (m, { conn, text, usedPrefix, command }) => {
+ if (!text) throw `if you find an error message, report it using this command\n\nexample:\n${usedPrefix + command} good afternoon owner, I found the following error `
+ if (text.length < 10) throw `gblk abbreviation, minimum 10 characters!`
+ if (text.length > 1000) throw `do you report or vent?, maximum 1000 characters!`
+ let teks = `*${command.toUpperCase()}!*\n\nFrom : *@${m.sender.split`@`[0]}*\n\nOrder : ${text}\n`
+ conn.reply(global.nomorown + '@s.whatsapp.net', m.quoted ? teks + m.quoted.text : teks, null, {
+ contextInfo: {
+ mentionedJid: [m.sender]
+ }
+ })
+ m.reply(`_Sent message owned by the bot, if ${command.toLowerCase()} just kidding will not be accepted._`)
+}
+handler.help = ['report', 'request'].map(v => v + ' ')
+handler.tags = ['info']
+handler.command = /^(report|request)$/i
+export default handler
\ No newline at end of file
diff --git a/plugins/3.js b/plugins/3.js
new file mode 100644
index 00000000..7efa53fa
--- /dev/null
+++ b/plugins/3.js
@@ -0,0 +1,21 @@
+import cp from 'child_process'
+import { promisify } from 'util'
+let exec = promisify(cp.exec).bind(cp)
+var handler = async (m) => {
+ await conn.reply(m.chat, "Wait", m)
+ let o
+ try {
+ o = await exec('python3 speed.py --share')
+ } catch (e) {
+ o = e
+ } finally {
+ let { stdout, stderr } = o
+ if (stdout.trim()) m.reply(stdout)
+ if (stderr.trim()) m.reply(stderr)
+ }
+}
+handler.help = ['testspeed']
+handler.tags = ['info']
+handler.command = /^(speedtest)$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/357.js b/plugins/357.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/358.js b/plugins/358.js
new file mode 100644
index 00000000..6644f2fd
--- /dev/null
+++ b/plugins/358.js
@@ -0,0 +1,647 @@
+import { createHash } from 'crypto'
+import PhoneNumber from 'awesome-phonenumber'
+import { canLevelUp, xpRange } from '../lib/levelling.js'
+import fetch from 'node-fetch'
+import fs from 'fs'
+const { levelling } = '../lib/levelling.js'
+import moment from 'moment-timezone'
+import { promises } from 'fs'
+import { join } from 'path'
+const time = moment.tz('Asia/Kolkata').format('HH')
+let wib = moment.tz('Asia/Kolkata').format('HH:mm:ss')
+//import db from '../lib/database.js'
+
+let handler = async (m, { conn, usedPrefix, command}) => {
+ let d = new Date(new Date + 3600000)
+ let locale = 'en'
+ let week = d.toLocaleDateString(locale, { weekday: 'long' })
+ let date = d.toLocaleDateString(locale, { day: 'numeric', month: 'long', year: 'numeric' })
+ let _uptime = process.uptime() * 1000
+ let uptime = clockString(_uptime)
+let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
+if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
+let pp = './STAR.jpg'
+let user = global.db.data.users[who]
+let { name, exp, diamond, lastclaim, registered, regTime, age, level, role, warn } = global.db.data.users[who]
+let { min, xp, max } = xpRange(user.level, global.multiplier)
+let username = conn.getName(who)
+let math = max - xp
+let prem = global.prems.includes(who.split`@`[0])
+let sn = createHash('md5').update(who).digest('hex')
+let totaluser = Object.values(global.db.data.users).length
+let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length
+let more = String.fromCharCode(8206)
+let readMore = more.repeat(850)
+let greeting = ucapan()
+let quote = quotes[Math.floor(Math.random() * quotes.length)];
+
+let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
+let str = `
+
+โโโ๐ค _BOT STATUS:_๐คโโโ
+โ ๐ฎ *Creator:* Excel Amadi
+โ ๐คก *Bot Name:* STAR-MD-V2
+โ ๐ป *Host:* Linux Lair
+โ ๐ฃ *Prefix:* ${usedPrefix}
+โ ๐ *Uptime:* ${uptime}
+โ ๐ *Database:* ${rtotalreg} of ${totaluser}
+โ ๐ *Total Users:* ${totaluser}
+โฐโโโโโโโโโโโโโโโโ
+
+โโโโฐ _Today's Sauce!_ โฐโโ
+โ ๐ *Today's Date:* ${date}
+โ โฒ๏ธ *Current Time:* ${wib}
+โฐโโโโโโโโโโโโโโโโ
+
+โโ*๐คUSER*โโ
+โ ๐พ *User Tag:* ${taguser}
+โ ๐ *Name:* ${name}
+โ ๐ *Master Mind:* Excel
+โ ๐ *Diamonds:* -9999
+โ ๐ *Rank:* ${role}
+โ ๐ฎ *XP:* ${exp}
+โฐโโโโโโโโโโโโโโโโ
+
+
+โโโใ *_religion_* ใโ
+โโ*bible [chapter_number|chapter_name]
+โ*quran [surah_number|surah_name]
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_AI_* ใโ
+โโ*bingimg2
+โโ*chatgpt
+โโ*aisearch
+โโ*toanime
+โโ*gitagpt
+โโ*chat
+โโ*blackbox
+โโ*bingimg
+โโ*tocartoon
+โโ*dalle
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_image_* ใโ
+โโ*blackpink
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_tools_* ใโ
+โโ*gemini
+โโ*nowa
+โโ*qr
+โโ*qrcode
+โโ*weather **
+โโ*shortlink
+โโ*bitly
+โโ*dehaze
+โโ*recolor
+โโ*hdr
+โโ*get
+โโ*length
+โโ*tinyurl
+โโ*shorten
+โโ*tempmail
+โโ*shazam
+โโ*cal
+โโ*.carbon
+โโ*define
+โโ*element
+โโ*itunes
+โโ*lyrics
+โโ*imdb
+โโ*course
+โโ*randomcourse
+โโ*readmore |
+โโ*readvo
+โโ*removebg
+โโ*ss
+โโ*ssf
+โโ*style
+โโ*subreddit
+โโ*telesticker โ
+โโ*tourl
+โโ*translate
+โโ*tts
+โโ*wa
+โโ*wikipedia
+โโ*true
+โโ*findmusic
+โโ*githubstalk
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_group_* ใโ
+โโ*getbio <@tag/reply> โ
+โโ*getbio <@tag/reply> โ
+โโ*animequote
+โโ*Setdesc
+โโ*setname
+โโ*add
+โโ*delete
+โโ*delwarn @user
+โโ*demote (@tag)
+โโ*infogp
+โโ*hidetag
+โโ*invite <917xxx>
+โโ*kick @user
+โโ*link
+โโ*poll question|option|option
+โโ*profile
+โโ*promote
+โโ*resetlink
+โโ*setbye
+โโ*group *open/close*
+โโ*setwelcome
+โโ*simulate @user
+โโ*staff
+โโ*tagall
+โโ*totag
+โโ*warn @user
+โโ*warns
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_anime_* ใโ
+โโ*anime
+โโ*akira
+โโ*akiyama
+โโ*anna
+โโ*asuna
+โโ*ayuzawa
+โโ*boruto
+โโ*chiho
+โโ*chitoge
+โโ*deidara
+โโ*erza
+โโ*elaina
+โโ*eba
+โโ*emilia
+โโ*hestia
+โโ*hinata
+โโ*inori
+โโ*isuzu
+โโ*itachi
+โโ*itori
+โโ*kaga
+โโ*kagura
+โโ*kaori
+โโ*keneki
+โโ*kotori
+โโ*kurumi
+โโ*madara
+โโ*mikasa
+โโ*miku
+โโ*minato
+โโ*naruto
+โโ*nezuko
+โโ*sagiri
+โโ*sasuke
+โโ*sakura
+โโ*akira
+โโ*amv โ
+โโ*waifu
+โโ*neko
+โโ*zerotwo
+โโ*loli
+โโ*jjanime โ
+โโ*pokedex
+โโ*trace
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_img_* ใโ
+โโ*messi
+โโ*cristianoronaldo
+โโ*cr7
+โโ*ppcouple
+โโ*ppcp
+โโ*pinterest
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_owner_* ใโ
+โโ*leavegc
+โโ*out
+โโ*deletechat
+โโ*pin
+โโ*unpin
+โโ*deletechat
+โโ*addprem <@tag>
+โโ*addowner @user
+โโ*allow <@tag>
+โโ*HEROKU
+โโ*ban @user
+โโ*banchat
+โโ*tx
+โโ*broadcastgroup
+โโ*bcgc
+โโ*cleartmp
+โโ*delexpired
+โโ*delprem @user
+โโ*removeowner @user
+โโ*setppbotfull
+โโ*getplugin
+โโ*getfile
+โโ*join
+โโ*reset <54xxx>
+โโ*resetprefix
+โโ*restart
+โโ*.setprefix
+โโ*.setprefix [symbol]
+โโ*unban @user
+โโ*unbanchat
+โโ*update
+โโ*update now
+โโ*config
+โโ*listban
+โโ*deleteplugin
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_fun_* ใโ
+โโ*afk
+โโ*tomp3
+โโ*toav
+โโ*toxicity
+โโ*bot
+โโ*character @tag
+โโ*dare
+โโ*flirt
+โโ*gay @user
+โโ*joke
+โโ*pickupline
+โโ*question
+โโ*shayari
+โโ*ship
+โโ*yomamajoke
+โโ*truth
+โโ*waste @user
+โโ*perv
+โโ*handsome
+โโ*hot
+โโ*sexy
+โโ*ugly
+โโ*cute
+โโ*playboy
+โโ*playgirl
+โโ*beautiful
+โโ*lesbian
+โโ*whore
+โโ*motherfucker
+โโ*sucker
+โโ*horny
+โโ*foolish
+โโ*nibba
+โโ*nibbi
+โโ*bitch
+โโ*waifu
+โโ*crackhead
+โโ*rascal
+โโ*idiot
+โโ*girlyboy
+โโ*tomboy
+โโ*gigachad
+โโ*mf
+โโ*introvert
+โโ*extrovert
+โโ*sigma
+โโ*psycho
+โโ*brainless
+โโ*useless
+โโ*singer
+โโ*image
+โโ*meme
+โโ*quote
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_reaction_* ใโ
+โโ*bully @tag
+โโ*cuddle @tag
+โโ*cry @tag
+โโ*hug @tag
+โโ*awoo @tag
+โโ*kiss @tag
+โโ*lick @tag
+โโ*pat @tag
+โโ*smug @tag
+โโ*bonk @tag
+โโ*yeet @tag
+โโ*blush @tag
+โโ*smile @tag
+โโ*wave @tag
+โโ*highfive @tag
+โโ*handhold @tag
+โโ*nom @tag
+โโ*bite @tag
+โโ*glomp @tag
+โโ*slap @tag
+โโ*kill @tag
+โโ*happy @tag
+โโ*wink @tag
+โโ*poke @tag
+โโ*dance @tag
+โโ*cringe @tag
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_utility_* ใโ
+โโ*bmi
+โโ*crypto
+โโ*currency
+โโ*countdown
+โโ*prayertime
+โโ*convert
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_main_* ใโ
+โโ*channel
+โโ*database
+โโ*user
+โโ*gpguru
+โโ*alive
+โโ*blocklist
+โโ*info
+โโ*owner
+โโ*totalfeature
+โโ*hack
+โโ*list
+โโ*botmenu
+โโ*ownermenu
+โโ*groupmenu
+โโ*dlmenu
+โโ*downloadermenu
+โโ*economymenu
+โโ*funmenu
+โโ*gamemenu
+โโ*stickermenu
+โโ*nsfwmenu
+โโ*logomenu
+โโ*toolmenu
+โโ*animemenu2
+โโ*animemenu
+โโ*listprem
+โโ*logomenu2
+โโ*ping
+โโ*ping2
+โโ*runtime
+โโ*script
+โโ*server
+โโ*system
+โโ*blocklist
+โโ*setprivacy
+โโ*allmenu
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_cmd_* ใโ
+โโ*delcmd
+โโ*listcmd
+โโ*setcmd
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_information_* ใโ
+โโ*cninfo
+โโ*fact
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_finance_* ใโ
+โโ*crypto
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_cryptocurrency_* ใโ
+โโ*crypto
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_time_* ใโ
+โโ*countdown
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_downloader_* ใโ
+โโ*facebook
+โโ*gdrive ๐
+โโ*gitclone
+โโ*igstalk
+โโ*instagram
+โโ*mediafire
+โโ*mega
+โโ*modapk
+โโ*play
+โโ*play2
+โโ*playvid
+โโ*play3 โ
+โโ*tiktok
+โโ*tiktokstalk
+โโ*twitter
+โโ*ytmp3
+โโ*ytsearch
+โโ*ytmp4
+โโ*wallpaper
+โโ*play โ
+โโ*play โ
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_premium_* ใโ
+โโ*gdrive ๐
+โโ*mediafire
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_economy_* ใโ
+โโ*addgold <@user>
+โโ*addxp <@user>
+โโ*bank
+โโ*buych
+โโ*cock-fight
+โโ*buy
+โโ*buyall
+โโ*daily
+โโ*deposit
+โโ*gamble
+โโ*give credit [amount] [@tag]
+โโ*levelup
+โโ*rank
+โโ*rob
+โโ*roulette
+โโ*wallet
+โโ*withdraw
+โโ*work
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_core_* ใโ
+โโ*leaderboard
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_game_* ใโ
+โโ*slot
+โโ*chess [from to]
+โโ*chess delete
+โโ*chess join
+โโ*chess start
+โโ*delttt
+โโ*guessflag
+โโ*Maths
+โโ*ppt
+โโ*tictactoe
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_config_* ใโ
+โโ*enable
+โโ*disable
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_internet_* ใโ
+โโ*google
+โโ*s
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_maker_* ใโ
+โโ*blur
+โโ*difuminar2
+โโ*hornycard
+โโ*hornylicense
+โโ*gfx1
+โโ*gfx2
+โโ*gfx3
+โโ*gfx4
+โโ*gfx5
+โโ*gfx6
+โโ*gfx7
+โโ*gfx8
+โโ*gfx9
+โโ*gfx10
+โโ*gfx11
+โโ*gfx12
+โโ*simpcard
+โโ*itssostupid
+โโ*iss
+โโ*stupid
+โโ*tweet
+โโ*lolicon
+โโ*quozio
+โโ*qmkr
+โโ*ytcomment
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_nsfw_* ใโ
+โโ*nsfw
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_advanced_* ใโ
+โโ$
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_plugin_* ใโ
+โโ*plugins
+โโ*install
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_rg_* ใโ
+โโ*reg
+โโ*mysn
+โโ*unreg
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_sticker_* ใโ
+โโ*emojimix
+โโ*getsticker
+โโ*smaker
+โโ*stickerwithmeme (caption|reply media)
+โโ*swmeme
+โโ*swm(caption|reply media)
+โโ*sfull
+โโ*toimg
+โโ*tovid
+โโ*trigger <@user>
+โโ*ttp
+โโ*ttp2
+โโ*ttp3
+โโ*ttp4
+โโ*ttp5
+โโ*attp
+โโ*attp2
+โโ*attp3
+โโ*take |
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_audio_* ใโ
+โโ*bass [vn]
+โโ*blown [vn]
+โโ*deep [vn]
+โโ*earrape [vn]
+โโ*fast [vn]
+โโ*fat [vn]
+โโ*nightcore [vn]
+โโ*reverse [vn]
+โโ*robot [vn]
+โโ*slow [vn]
+โโ*smooth [vn]
+โโ*tupai [vn]
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_news_* ใโ
+โโ*news
+โโ*technews
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_conversion_* ใโ
+โโ*convert
+โฐโโโโโโโโโโโโโโโโโโ
+๐๐๐ฐ๐-๐ผ๐ณ-๐
๐ธ ๐ฑ๐ ๐ด๐๐ฒ๐ด๐ป ๐ฐ๐ผ๐ฐ๐ณ๐ธ`
+
+
+ let rpyt = ""; // You can assign it a value or leave it as an empty string based on your requirements
+
+// Your main code here
+conn.on('chat-update', async (m) => {
+ if (!m.hasNewMessage) return;
+ let pp = await conn.getProfilePicture(m.sender);
+ let str = m.sender ? 's.whatsapp.net' : 'WhatsApp';
+ conn.sendFile(m.chat, pp, 'perfil.jpg', str, m, null, rpyt);
+ m.react(done);
+});
+}
+handler.help = ['main']
+handler.tags = ['group']
+handler.command = ['menv', 'helb']
+
+export default handler
+function clockString(ms) {
+ let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000)
+ let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60
+ return [h, m, s].map(v => v.toString().padStart(2, 0)).join(':')}
+
+ function ucapan() {
+ const time = moment.tz('Asia/Kolkata').format('HH')
+ let res = "happy early in the dayโ๏ธ"
+ if (time >= 4) {
+ res = "Good Morning ๐"
+ }
+ if (time >= 10) {
+ res = "Good Afternoon โ๏ธ"
+ }
+ if (time >= 15) {
+ res = "Good Afternoon ๐"
+ }
+ if (time >= 18) {
+ res = "Good Night ๐"
+ }
+ return res
+ }
+ const quotes = [
+ "I'm not lazy, I'm just on my energy saving mode.",
+ "Life is short, smile while you still have teeth.",
+ "I may be a bad influence, but darn I am fun!",
+ "I'm on a whiskey diet. I've lost three days already.",
+ "Why don't some couples go to the gym? Because some relationships don't work out.",
+ "I told my wife she should embrace her mistakes... She gave me a hug.",
+ "I'm great at multitasking. I can waste time, be unproductive, and procrastinate all at once.",
+ "You know you're getting old when you stoop to tie your shoelaces and wonder what else you could do while you're down there.",
+ "I'm so good at sleeping, I can do it with my eyes closed.",
+ "If you think nobody cares if youโre alive, try missing a couple of payments.",
+ "I used to think I was indecisive, but now I'm not so sure.",
+ "If you can't convince them, confuse them.",
+ "I told my wife she was drawing her eyebrows too high. She looked surprised.",
+ "I'm not clumsy, I'm just on a mission to test gravity.",
+ "I told my wife she should do more push-ups. She said, 'I could do a hundred!' So I counted to ten and stopped.",
+ "Life is like a box of chocolates; it doesn't last long if you're hungry.",
+ "I'm not saying I'm Wonder Woman, I'm just saying no one has ever seen me and Wonder Woman in the same room together.",
+ "Why do they call it beauty sleep when you wake up looking like a troll?",
+ "I don't always lose my phone, but when I do, it's always on silent.",
+ "My bed is a magical place where I suddenly remember everything I was supposed to do.",
+ "I love the sound you make when you shut up.",
+ "I'm not arguing, I'm just explaining why I'm right.",
+ "I'm not a complete idiot, some parts are missing.",
+ "When life gives you lemons, squirt someone in the eye.",
+ "I don't need anger management. You just need to stop making me angry.",
+ "I'm not saying I'm Batman. I'm just saying no one has ever seen me and Batman in the same room together.",
+ "I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
+ "I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
+ "I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together.",
+ "The early bird can have the worm because worms are gross and mornings are stupid.",
+ "If life gives you lemons, make lemonade. Then find someone whose life has given them vodka and have a party!",
+ "The road to success is always under construction.",
+ "I am so clever that sometimes I don't understand a single word of what I am saying.",
+ "Some people just need a high-five. In the face. With a chair.",
+ "I'm not saying I'm perfect, but I'm pretty close.",
+ "A day without sunshine is like, you know, night.",
+ "The best way to predict the future is to create it.",
+ "If you can't be a good example, then you'll just have to be a horrible warning.",
+ "I don't know why I keep hitting the escape button. I'm just trying to get out of here.",
+ "I'm not lazy. I'm on energy-saving mode.",
+ "I don't need a hairstylist, my pillow gives me a new hairstyle every morning.",
+ "I don't have a bad handwriting, I have my own font.",
+ "I'm not clumsy. It's just the floor hates me, the table and chairs are bullies, and the walls get in my way.",
+ "I'm not saying I'm Batman. I'm just saying no one has ever seen me and Batman in the same room together.",
+ "I'm not saying I'm Wonder Woman. I'm just saying no one has ever seen me and Wonder Woman in the same room together.",
+ "I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
+ "I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
+ "I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together.",
+ "เคตเคเฅเคค เคนเคฎเฅ เคฌเคนเฅเคค เคเฅเค เคธเคฟเคเคพ เคฆเฅเคคเคพ เคนเฅ, เคเคพเคธเคเคฐ เคคเคฌ เคเคฌ เคนเคฎเคพเคฐเฅ เคชเคพเคธ เคตเคเฅเคค เคจเคนเฅเค เคนเฅเคคเคพเฅค",
+ "เคเคฟเคเคฆเคเฅ เคเค เคเคฟเคคเคพเคฌ เคเฅ เคคเคฐเคน เคนเฅเคคเฅ เคนเฅ, เคนเคฐ เคฆเคฟเคจ เคจเคฏเคพ เคชเคจเฅเคจเคพ เคฌเคฆเคฒเคคเคพ เคนเฅเฅค เคเคญเฅ เคนเคเคธเคคเฅ เคนเฅเค, เคเคญเฅ เคฐเฅเคคเฅ เคนเฅเค, เคชเคฐ เคนเคฐ เคเคฟเคธเฅ เคเฅ เคเคนเคพเคจเฅ เค
เคงเฅเคฐเฅ เคนเฅเคคเฅ เคนเฅ!",
+ "เคชเคขเคผเคพเค เคเคฐเฅ เคคเฅ เคฆเคฟเคฒ เคฒเคเคคเคพ เคจเคนเฅ, เคฆเคฟเคฒ เคฒเคเคพเค เคคเฅ เคฆเคฟเคฎเคพเคเคผ เคฒเคเคคเคพ เคจเคนเฅเคเฅค",
+ "เคฆเฅเคธเฅเคคเฅ เคเคคเคจเฅ เคเคนเคฐเฅ เคเคฐเฅ เคเฅ เคฆเคฟเคฒ เคฎเฅเค เคฌเคธ เคเคพเค, เคเคธเฅ เคฆเฅเคธเฅเคคเฅ เคจเคฟเคญเคพเค เคเฅ เคนเคฎเฅ เคญเฅ เคคเฅเคฎเฅเคนเคพเคฐเฅ เคฆเฅเคธเฅเคค เคนเฅเคจเฅ เคชเคฐ เคจเคพเค เคนเฅเฅค",
+ "เคฎเฅเคฐเฅ เคฆเฅเคธเฅเคค เคคเฅเคฎ เคฌเคนเฅเคค เคฏเคพเคฆ เคเคคเฅ เคนเฅ, เคเคฌ เคญเฅ เคญเฅเค เคฒเคเคคเฅ เคนเฅ เคตเฅ เคธเคฎเฅเคธเฅ เคฌเคนเฅเคค เคฏเคพเคฆ เคเคคเฅ เคนเฅเฅค",
+ "เคเฅเคตเคจ เคเคพ เค
เคธเคฒเฅ เคฎเคเคผเคพ เคคเฅ เคคเคฌ เคเคคเคพ เคนเฅ, เคเคฌ เคฆเฅเคธเคฐเฅ เคเคชเคเฅ เคเคผเคฟเคเคฆเคเฅ เคเฅเคจเฅ เคเฅ เคเฅเคถเคฟเคถ เคเคฐเคคเฅ เคนเฅเคเฅค",
+ "เคเฅเค เคฒเฅเค เคคเฅ เคเคคเคจเฅ เคซเคพเคฒเคคเฅ เคนเฅเคคเฅ เคนเฅเค, เคเฅเคฆ เคเฅ เคเคผเคฟเคเคฆเคเฅ เคเฅเคฆ เคนเฅ เคจเคนเฅเค เคเฅ เคชเคพเคคเฅ เคเคฐ เคฆเฅเคธเคฐเฅเค เคเฅ เคเคผเคฟเคเคฆเคเฅ เคฎเฅเค เคเคพเคเค เค
เคกเคผเคพ เคฆเฅเคคเฅ เคนเฅเคเฅค"
+];
\ No newline at end of file
diff --git a/plugins/359.js b/plugins/359.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/360 logo.js b/plugins/360 logo.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/4.js b/plugins/4.js
new file mode 100644
index 00000000..49904e83
--- /dev/null
+++ b/plugins/4.js
@@ -0,0 +1,21 @@
+import cp from 'child_process'
+import { promisify } from 'util'
+let exec = promisify(cp.exec).bind(cp)
+let handler = async (m) => {
+ await conn.reply(m.chat, "wait a minute", m)
+ let o
+ try {
+ o = await exec('df -h')
+ } catch (e) {
+ o = e
+ } finally {
+ let { stdout, stderr } = o
+ if (stdout.trim()) m.reply(stdout)
+ if (stderr.trim()) m.reply(stderr)
+ }
+}
+handler.help = ['statserver']
+handler.tags = ['info']
+handler.command = /^(statserver)$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/5.js b/plugins/5.js
new file mode 100644
index 00000000..1f23154b
--- /dev/null
+++ b/plugins/5.js
@@ -0,0 +1,53 @@
+let handler = (m, { usedPrefix, command, text }) => {
+ if (!text) throw `Use format: yyyy-mm-dd\n\nExample:\n${usedPrefix + command} 2002 02 25`
+
+ const date = new Date(text)
+ if (date == 'Invalid Date') throw date
+ const d = new Date()
+ const [tahun, bulan, tanggal] = [d.getFullYear(), d.getMonth() + 1, d.getDate()]
+ const birth = [date.getFullYear(), date.getMonth() + 1, date.getDate()]
+
+ const zodiac = getZodiac(birth[1], birth[2])
+ const ageD = new Date(d - date)
+ const age = ageD.getFullYear() - new Date(1970, 0, 1).getFullYear()
+
+ const birthday = [tahun + (birth[1] < bulan), ...birth.slice(1)]
+ const cekusia = bulan === birth[1] && tanggal === birth[2] ? `${age} -happy birthday to you ๐ฅณ` : age
+
+ const teks = `
+Born : ${birth.join('-')}
+Upcoming Birthday : ${birthday.join('-')}
+Age : ${cekusia}
+Zodiac : ${zodiac}
+
+
+ยฉsแดแดส-แดแด
-แด 2 โข แดแดสแดษช แด
แดแด ษชแดแด\nowner: +2347045035241
+`.trim()
+ m.reply(teks)
+}
+handler.tags = ['tools']
+
+handler.command = /^zodia[kc]$/i
+
+export default handler
+
+const zodiak = [
+ ["Capricorn", new Date(1970, 0, 1)],
+ ["Aquarius", new Date(1970, 0, 20)],
+ ["Pisces", new Date(1970, 1, 19)],
+ ["Aries", new Date(1970, 2, 21)],
+ ["Taurus", new Date(1970, 3, 21)],
+ ["Gemini", new Date(1970, 4, 21)],
+ ["Cancer", new Date(1970, 5, 22)],
+ ["Leo", new Date(1970, 6, 23)],
+ ["Virgo", new Date(1970, 7, 23)],
+ ["Libra", new Date(1970, 8, 23)],
+ ["Scorpio", new Date(1970, 9, 23)],
+ ["Sagittarius", new Date(1970, 10, 22)],
+ ["Capricorn", new Date(1970, 11, 22)]
+].reverse()
+
+function getZodiac(month, day) {
+ let d = new Date(1970, month - 1, day)
+ return zodiak.find(([_,_d]) => d >= _d)[0]
+}
\ No newline at end of file
diff --git a/plugins/6.js b/plugins/6.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/7.js b/plugins/7.js
new file mode 100644
index 00000000..3b3c3713
--- /dev/null
+++ b/plugins/7.js
@@ -0,0 +1,29 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { text, usedPrefix, command }) => {
+ if (!text) throw `Usage:\n${usedPrefix + command} \n\nExample:\n${usedPrefix + command} Dhaka`
+ let res = await fetch(API('https://api.openweathermap.org', '/data/2.5/weather', {
+ q: text,
+ units: 'metric',
+ appid: '060a6bcfa19809c2cd4d97a212b19273'
+ }))
+ if (!res.ok) throw 'location not found'
+ let json = await res.json()
+ if (json.cod != 200) throw json
+ m.reply(`
+Location: ${json.name}
+Country: ${json.sys.country}
+The weather: ${json.weather[0].description}
+Current temperature: ${json.main.temp} ยฐC
+The highest temperature: ${json.main.temp_max} ยฐC
+Lowest temperature: ${json.main.temp_min} ยฐC
+Humidity: ${json.main.humidity} %
+The wind: ${json.wind.speed} km/jam
+ `.trim())
+}
+
+handler.help = ['cuaca']
+handler.tags = ['internet']
+handler.command = /^(cuaca|water)$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/8.js b/plugins/8.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/9.js b/plugins/9.js
new file mode 100644
index 00000000..0f56eabb
--- /dev/null
+++ b/plugins/9.js
@@ -0,0 +1,54 @@
+import fetch from 'node-fetch';
+
+const htki = "HTKI"; // Define htki as a string or appropriate value
+const htka = "HTKA"; // Define htka as a string or appropriate value
+const botdate = new Date().toISOString(); // Define botdate as the current date in ISO format or your preferred format
+
+let handler = async (m, { text, command, usedPrefix, conn }) => {
+ if (!text) throw `contoh:\n${usedPrefix + command} STAR-MD-V2`;
+
+ let res = await fetch(global.API('https://api.github.com', '/search/repositories', { q: text }));
+ if (!res.ok) throw new Error('Error fetching data from GitHub');
+
+ let json = await res.json();
+ let str = json.items.map((repo, index) => {
+ return `> ใ ${1 + index} ใ <
+ษดแดแดแด สแดแดแด : ${repo.name}
+สส : ${repo.owner.login}
+าแดสแดแดแด
: ${repo.fork ? 'True' : 'False'}
+แดสษชแด แดแดแด : ${repo.private ? 'True': 'False'}
+
+โ แดสแดแดแดแดแด
แดษด : ${formatDate(repo.created_at)}
+โ สแดsแด แดแดแด
แดแดแด แดษด :${formatDate(repo.updated_at)}
+๐ ${repo.watchers} ๐ด ${repo.forks} โญ ${repo.stargazers_count}
+โ ษชssแดแด : ${repo.open_issues} ${repo.description ? `
+๐ แด
แดsแดสษชแดแดษชแดษด:
+${repo.description}` : ''}
+
+โ แดสแดษดแด :
+$ git clone ${repo.clone_url}
+`.trim();
+ }).join('\nโ โ โ โ โ โ โ โ โ โ โ โ โ โ\n');
+
+ conn.sendHydrated(m.chat, `*${htki} ษขษชแดสแดส sแดแดสแดส ${htka}*\n` + str, botdate, null, json.items.map(repo => repo.html_url), ['[ 1 ] ส ษช ษด แด', '[ 2 ] ส ษช ษด แด', '[ 3 ] ส ษช ษด แด'], null, null, [[null,null],[null,null],[null,null]], m);
+};
+
+handler.help = ['githubsearch'].map(v => v + ' ');
+handler.tags = ['internet','downloader'];
+
+handler.command = /^g(ithub|h)s(earch)?$/i;
+
+export default handler;
+
+function formatDate(n, locale = 'id') {
+ let d = new Date(n);
+ return d.toLocaleDateString(locale, {
+ weekday: 'long',
+ day: 'numeric',
+ month: 'long',
+ year: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric'
+ });
+}
\ No newline at end of file
diff --git a/plugins/A.js b/plugins/A.js
new file mode 100644
index 00000000..12b0e281
--- /dev/null
+++ b/plugins/A.js
@@ -0,0 +1,121 @@
+class Minesweeper {
+ constructor(rows, cols, mines) {
+ this.rows = rows;
+ this.cols = cols;
+ this.mines = mines;
+ this.board = this.initializeBoard();
+ this.revealed = this.initializeRevealed();
+ this.placeMines();
+ this.calculateNumbers();
+ this.gameOver = false;
+ }
+
+ initializeBoard() {
+ return Array.from({ length: this.rows }, () => Array(this.cols).fill(0));
+ }
+
+ initializeRevealed() {
+ return Array.from({ length: this.rows }, () => Array(this.cols).fill(false));
+ }
+
+ placeMines() {
+ let minesPlaced = 0;
+ while (minesPlaced < this.mines) {
+ const row = Math.floor(Math.random() * this.rows);
+ const col = Math.floor(Math.random() * this.cols);
+ if (this.board[row][col] !== 'M') {
+ this.board[row][col] = 'M';
+ minesPlaced++;
+ }
+ }
+ }
+
+ calculateNumbers() {
+ const directions = [
+ [-1, -1], [-1, 0], [-1, 1],
+ [0, -1], /*M*/ [0, 1],
+ [1, -1], [1, 0], [1, 1]
+ ];
+ for (let row = 0; row < this.rows; row++) {
+ for (let col = 0; col < this.cols; col++) {
+ if (this.board[row][col] === 'M') continue;
+ let mineCount = 0;
+ directions.forEach(([dx, dy]) => {
+ const newRow = row + dx;
+ const newCol = col + dy;
+ if (newRow >= 0 && newRow < this.rows && newCol >= 0 && newCol < this.cols) {
+ if (this.board[newRow][newCol] === 'M') mineCount++;
+ }
+ });
+ this.board[row][col] = mineCount;
+ }
+ }
+ }
+
+ reveal(row, col) {
+ if (
+ isNaN(row) || isNaN(col) ||
+ row < 0 || row >= this.rows ||
+ col < 0 || col >= this.cols ||
+ this.revealed[row][col] ||
+ this.gameOver
+ ) {
+ return 'Invalid move or game over.';
+ }
+ this.revealed[row][col] = true;
+ if (this.board[row][col] === 'M') {
+ this.gameOver = true;
+ this.revealAll();
+ return 'You hit a mine! Game over.';
+ }
+ if (this.board[row][col] === 0) {
+ const directions = [
+ [-1, -1], [-1, 0], [-1, 1],
+ [0, -1], /*M*/ [0, 1],
+ [1, -1], [1, 0], [1, 1]
+ ];
+ directions.forEach(([dx, dy]) => {
+ const newRow = row + dx;
+ const newCol = col + dy;
+ if (newRow >= 0 && newRow < this.rows && newCol >= 0 && newCol < this.cols && !this.revealed[newRow][newCol]) {
+ this.reveal(newRow, newCol);
+ }
+ });
+ }
+ return 'Keep going Star๐คฉ!';
+ }
+
+ revealAll() {
+ this.revealed = this.revealed.map(row => row.map(() => true));
+ }
+
+ display() {
+ const emojis = ['โฌ๏ธ', '1๏ธโฃ', '2๏ธโฃ', '3๏ธโฃ', '4๏ธโฃ', '5๏ธโฃ', '6๏ธโฃ', '7๏ธโฃ', '8๏ธโฃ', '9๏ธโฃ', '๐', '๐ฃ'];
+ return this.board.map((row, rowIndex) =>
+ row.map((cell, colIndex) =>
+ this.revealed[rowIndex][colIndex] ? (cell === 'M' ? emojis[11] : emojis[cell]) : 'โฌ๏ธ').join('')
+ ).join('\n');
+ }
+}
+
+// Integrate Minesweeper with the bot
+const handler = async (m, { conn, command, text }) => {
+ if (!global.minesweeper) {
+ global.minesweeper = new Minesweeper(8, 8, 10); // Create a new game with 8x8 board and 10 mines
+ }
+
+ if (command === 'mine') {
+ conn.reply(m.chat, 'Minesweeper game started!\n\n' + global.minesweeper.display(), m);
+ } else if (command.startsWith('mine')) {
+ const [_, row, col] = text.split(' ');
+ const result = global.minesweeper.reveal(parseInt(row), parseInt(col));
+ conn.reply(m.chat, result + '\n\n' + global.minesweeper.display(), m);
+ }
+};
+
+handler.help = ['mine '];
+handler.tags = ['game'];
+handler.command = ['mine'];
+handler.rowner = true;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/AB-spam.js b/plugins/AB-spam.js
index 71e0e81e..da526bd1 100644
--- a/plugins/AB-spam.js
+++ b/plugins/AB-spam.js
@@ -1,63 +1,29 @@
-//ABRAHAM DWAMENA
-import { performance } from 'perf_hooks';
-
-// This function is used to prevent users from sending too many messages in a chat application or bot.
-
-export async function before(m) {
- // Get information about users and chats from global data.
- const users = global.db.data.users;
- const chats = global.db.data.chats;
-
- // Check various conditions to determine if anti-spam measures should be applied.
-
- // If anti-spam is disabled for this chat, or if the message is from the bot itself,
- // or if the message type is a system message or poll update, do nothing and exit the function.
- if (!chats[m.chat].antiSpam || m.isBaileys || m.mtype === 'protocolMessage' || m.mtype === 'pollUpdateMessage' || m.mtype === 'reactionMessage') {
- return;
- }
-
- // If there is no message content, or if the sender is banned, or if the chat is banned,
- // do nothing and exit the function.
- if (!m.msg || !m.message || m.key.remoteJid !== m.chat || users[m.sender].banned || chats[m.chat].isBanned) {
- return;
- }
-
- // Create or access a 'spam' object for the sender to keep track of spam-related data.
- this.spam = this.spam || {};
- this.spam[m.sender] = this.spam[m.sender] || { count: 0, lastspam: 0 };
-
- // Get the current time in milliseconds.
- const now = performance.now();
-
- // Calculate the time difference since the last message from this sender.
- const timeDifference = now - this.spam[m.sender].lastspam;
-
- // If the time difference is less than 10 seconds, it means the sender is sending messages too quickly.
- if (timeDifference < 10000) {
- // Increment the sender's spam count.
- this.spam[m.sender].count++;
-
- // If the sender's spam count reaches 5 or more, mark the sender as banned and set a 5-second cooldown.
- if (this.spam[m.sender].count >= 5) {
- users[m.sender].banned = true;
- this.spam[m.sender].lastspam = now + 5000;
-
- // Schedule a timeout to unban the user and reset their spam count after 5 seconds.
- setTimeout(() => {
- users[m.sender].banned = false;
- this.spam[m.sender].count = 0;
- m.reply(`โ
*Cooldown finished*\nYou can send messages again.`);
- }, 5000);
-
- // Notify the sender about the spamming and the remaining cooldown time.
- const message = m.mtype.replace(/message$/i, '').replace('audio', m.msg.ptt ? 'PTT' : 'audio').replace(/^./, v => v.toUpperCase()) || 'Unknown';
- return m.reply(`โ *Please do not spam ${message}*\nWait for ${Math.ceil((this.spam[m.sender].lastspam - now) / 1000)} seconds`);
+//Fixie's by Excel
+
+export async function all(m) {
+ if (!m.message)
+ return
+ this.spam = this.spam ? this.spam : {}
+ let chat = global.db.data.chats[m.chat]
+ if (chat.antiSpam) {
+ if (m.sender in this.spam) {
+ this.spam[m.sender].count++
+ if (m.messageTimestamp.toNumber() - this.spam[m.sender].lastspam > 10) {
+ if (this.spam[m.sender].count > 10) {
+ global.db.data.users[m.sender].banned = true
+ let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? this.user.jid : m.sender
+ let caption = ` Banned *@${who.split("@")[0]}* Don't spam sis!`
+ this.sendButton(m.chat, caption, wm, null, [['Matikan AntiSpam', '/disable antispam']], m, { mentions: this.parseMention(caption) })
+ }
+ this.spam[m.sender].count = 0
+ this.spam[m.sender].lastspam = m.messageTimestamp.toNumber()
}
- } else {
- // If the time difference is greater than or equal to 10 seconds, reset the sender's spam count.
- this.spam[m.sender].count = 0;
}
-
- // Update the 'lastspam' timestamp to the current time for the sender.
- this.spam[m.sender].lastspam = now;
-}
+ else
+ this.spam[m.sender] = {
+ jid: m.sender,
+ count: 0,
+ lastspam: 0
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/Abraham.js b/plugins/Abraham.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/Bingimg-2. 0-test.js b/plugins/Bingimg-2. 0-test.js
index 3857ffce..110bff2b 100644
--- a/plugins/Bingimg-2. 0-test.js
+++ b/plugins/Bingimg-2. 0-test.js
@@ -1,26 +1,59 @@
import fetch from 'node-fetch';
-let handler = async (m, { conn, text, usedPrefix, command }) => {
- if (!text) throw `*This command generates images from text prompts*\n\n*๐ดxample usage*\n*โ ${usedPrefix + command} Beautiful anime girl*\n*โ ${usedPrefix + command} A CAT WITH DOG*`;
-
- try {
- m.reply('*Please wait, generating images...*');
-
- const endpoint = `https://vihangayt.me/tools/lexicaart?q=${encodeURIComponent(text)}`;
- const response = await fetch(endpoint);
-
- if (response.ok) {
- const imageBuffer = await response.buffer();
- await conn.sendFile(m.chat, imageBuffer, 'image.png', null, m);
- } else {
- throw '*Image generation failed*';
- }
- } catch {
- throw '*Oops! Something went wrong while generating images. Please try again later.*';
+// Main handler function
+let handler = async (message, { conn, args, usedPrefix, command, text }) => {
+ // Check if the text is provided directly or in a quoted message
+ if (!text && !(message.quoted && message.quoted.text)) {
+ throw 'Please provide some text or quote a message to get a response.';
}
+
+ // Use quoted message text if no direct text is provided
+ if (!text && message.quoted && message.quoted.text) {
+ text = message.quoted.text;
+ }
+
+ // Show bot's thinking status
+ await message.react('thinking...');
+ await message.react('๐ค');
+
+ // Encode the text to be used in a URL
+ const encodedText = encodeURIComponent(text);
+
+ // Fetch the response from the Bing AI service
+ let response = await fetchBingResponse(encodedText);
+
+ // If no response is received, throw an error
+ if (!response) {
+ throw new Error('No valid JSON response from Bing');
+ }
+
+ // Reply with the result from Bing
+ await conn.reply(message.chat, response.result, message);
};
-handler.help = ['bingimg2'];
-handler.tags = ['AI'];
-handler.command = ['dalle2', 'bingimg2'];
+// Handler metadata
+handler.tags = ['ai'];
+handler.help = ['bing'];
+handler.command = /^(bing)$/i;
export default handler;
+
+// Function to call the Bing API
+async function fetchBingResponse(query) {
+ const url = `https://aemt.me/bingai?text=${query}`;
+ const headers = {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
+ };
+
+ const response = await fetch(url, {
+ method: 'GET',
+ headers: headers
+ });
+
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+
+ const data = await response.json();
+ return data;
+}
\ No newline at end of file
diff --git a/plugins/Bug.js b/plugins/Bug.js
new file mode 100644
index 00000000..c5f7ad1d
--- /dev/null
+++ b/plugins/Bug.js
@@ -0,0 +1,8 @@
+let handler = async m => m.reply(`
+๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅโฌค๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅโฌค๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅโฌค๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅโฌค๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅโฌค๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅโฌค๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ๐ฅ๐๐ฅ
+`.trim())
+handler.help = ['bug']
+handler.tags = ['owner']
+handler.command = ['bug', 'virus']
+
+export default handler
\ No newline at end of file
diff --git a/plugins/Chickenfight.js b/plugins/Chickenfight.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/GAME-AKINATOR.js b/plugins/GAME-AKINATOR.js
new file mode 100644
index 00000000..4dc53dd4
--- /dev/null
+++ b/plugins/GAME-AKINATOR.js
@@ -0,0 +1,52 @@
+import fetch from 'node-fetch';
+import translate from '@vitalets/google-translate-api';
+import fs from 'fs';
+
+const handler = async (m, {conn, usedPrefix, command, text}) => {
+ const datas = global;
+ const idioma = datas.db.data.users[m.sender].language;
+ const _translate = JSON.parse(fs.readFileSync(`./language/${idioma}.json`));
+ const tradutor = _translate.plugins.game_akinator;
+
+ if (m.isGroup) return;
+ const aki = global.db.data.users[m.sender].akinator;
+ if (text === 'end') {
+ if (!aki.sesi) return m.reply(tradutor.texto1);
+ aki.sesi = false;
+ aki.soal = null;
+ m.reply(tradutor.texto2);
+ } else {
+ if (aki.sesi) return conn.reply(m.chat, tradutor.texto3, aki.soal);
+ try {
+ const res = await fetch(`https://api.lolhuman.xyz/api/akinator/start?apikey=${lolkeysapi}`);
+ const anu = await res.json();
+ if (anu.status !== 200) throw tradutor.texto4;
+ const {server, frontaddr, session, signature, question, progression, step} = anu.result;
+ aki.sesi = true;
+ aki.server = server;
+ aki.frontaddr = frontaddr;
+ aki.session = session;
+ aki.signature = signature;
+ aki.question = question;
+ aki.progression = progression;
+ aki.step = step;
+ const resultes2 = await translate(question, {to: 'en', autoCorrect: false});
+ let txt = `${tradutor.texto5[0]} @${m.sender.split('@')[0]}*\n${tradutor.texto5[1]} ${resultes2.text}*\n\n`;
+ txt += tradutor.texto5[2];
+ txt += tradutor.texto5[3];
+ txt += tradutor.texto5[4];
+ txt += tradutor.texto5[5];
+ txt += tradutor.texto5[6];
+ txt += `${tradutor.texto5[7]} ${usedPrefix + command} ${tradutor.texto5[8]}`;
+ const soal = await conn.sendMessage(m.chat, {text: txt, mentions: [m.sender]}, {quoted: m});
+ aki.soal = soal;
+ } catch {
+ m.reply(tradutor.texto6);
+ }
+ }
+};
+
+handler.menu = ['akinator'];
+handler.tags = ['game'];
+handler.command = /^(akinator)$/i;
+export default handler;
\ No newline at end of file
diff --git a/plugins/GAME-MINESWEEPER.js b/plugins/GAME-MINESWEEPER.js
new file mode 100644
index 00000000..172723d7
--- /dev/null
+++ b/plugins/GAME-MINESWEEPER.js
@@ -0,0 +1,137 @@
+class Minesweeper {
+ constructor(rows, cols, mines) {
+ this.rows = rows;
+ this.cols = cols;
+ this.mines = mines;
+ this.board = this.initializeBoard();
+ this.revealed = this.initializeRevealed();
+ this.placeMines();
+ this.calculateNumbers();
+ this.gameOver = false;
+ }
+
+ initializeBoard() {
+ return Array.from({ length: this.rows }, () => Array(this.cols).fill(0));
+ }
+
+ initializeRevealed() {
+ return Array.from({ length: this.rows }, () => Array(this.cols).fill(false));
+ }
+
+ placeMines() {
+ let minesPlaced = 0;
+ while (minesPlaced < this.mines) {
+ const row = Math.floor(Math.random() * this.rows);
+ const col = Math.floor(Math.random() * this.cols);
+ if (this.board[row][col] !== 'M') {
+ this.board[row][col] = 'M';
+ minesPlaced++;
+ }
+ }
+ }
+
+ calculateNumbers() {
+ const directions = [
+ [-1, -1], [-1, 0], [-1, 1],
+ [0, -1], /*M*/ [0, 1],
+ [1, -1], [1, 0], [1, 1]
+ ];
+ for (let row = 0; row < this.rows; row++) {
+ for (let col = 0; col < this.cols; col++) {
+ if (this.board[row][col] === 'M') continue;
+ let mineCount = 0;
+ directions.forEach(([dx, dy]) => {
+ const newRow = row + dx;
+ const newCol = col + dy;
+ if (newRow >= 0 && newRow < this.rows && newCol >= 0 && newCol < this.cols) {
+ if (this.board[newRow][newCol] === 'M') mineCount++;
+ }
+ });
+ this.board[row][col] = mineCount;
+ }
+ }
+ }
+
+ reveal(row, col) {
+ if (isNaN(row) || isNaN(col)) {
+ return 'Invalid input. Row and column must be numbers.';
+ }
+ if (row < 0 || row >= this.rows || col < 0 || col >= this.cols) {
+ return 'Invalid move. Row and column must be within the board boundaries.';
+ }
+ if (this.revealed[row][col]) {
+ return 'Invalid move. Cell already revealed.';
+ }
+ if (this.gameOver) {
+ return 'Game over. Start a new game.';
+ }
+
+ this.revealed[row][col] = true;
+ if (this.board[row][col] === 'M') {
+ this.gameOver = true;
+ this.revealAll();
+ return 'You hit a mine! Game over.';
+ }
+ if (this.board[row][col] === 0) {
+ const directions = [
+ [-1, -1], [-1, 0], [-1, 1],
+ [0, -1], /*M*/ [0, 1],
+ [1, -1], [1, 0], [1, 1]
+ ];
+ directions.forEach(([dx, dy]) => {
+ this.reveal(row + dx, col + dy);
+ });
+ }
+ return 'Keep going!';
+ }
+
+ revealAll() {
+ this.revealed = this.revealed.map(row => row.map(() => true));
+ }
+
+ display() {
+ const emojis = ['โฌ', '1๏ธโฃ', '2๏ธโฃ', '3๏ธโฃ', '4๏ธโฃ', '5๏ธโฃ', '6๏ธโฃ', '7๏ธโฃ', '8๏ธโฃ', '9๏ธโฃ', '๐'];
+ return this.board.map((row, rowIndex) =>
+ row.map((cell, colIndex) =>
+ this.revealed[rowIndex][colIndex] ? (cell === 'M' ? '๐ฃ' : emojis[cell]) : 'โฌ๏ธ').join('')
+ ).join('\n');
+ }
+}
+
+// Integrate Minesweeper with the bot
+const handler = async (m, { conn, command, text }) => {
+ if (!global.minesweeper) {
+ global.minesweeper = new Minesweeper(8, 8, 10); // Create a new game with 8x8 board and 10 mines
+ }
+
+ if (command === 'mine') {
+ conn.reply(m.chat, 'Minesweeper game started!\n\n' + global.minesweeper.display(), m);
+ } else if (command.startsWith('reveal')) {
+ const args = text.split(' ');
+
+ // Check if the correct number of arguments is provided
+ if (args.length !== 3) {
+ conn.reply(m.chat, 'Usage: reveal \nExample: reveal 1 1', m);
+ return;
+ }
+
+ const rowNum = parseInt(args[1]);
+ const colNum = parseInt(args[2]);
+
+ // Check if parsed arguments are valid numbers
+ if (isNaN(rowNum) || isNaN(colNum)) {
+ conn.reply(m.chat, 'Please provide valid numbers for row and column.\nUsage: reveal \nExample: reveal 1 1', m);
+ return;
+ }
+
+ const result = global.minesweeper.reveal(rowNum, colNum);
+ conn.reply(m.chat, result + '\n\n' + global.minesweeper.display(), m);
+ }
+};
+
+handler.help = ['mine', 'reveal '];
+handler.tags = ['game'];
+handler.command = ['mine', 'reveal'];
+handler.rowner = true;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/GAME-flipcoin.js b/plugins/GAME-flipcoin.js
new file mode 100644
index 00000000..52ebd068
--- /dev/null
+++ b/plugins/GAME-flipcoin.js
@@ -0,0 +1,13 @@
+let handler = async(m, { conn, args }) => {
+ let coinFlip = Math.floor(Math.random() * 2) + 1;
+ if (coinFlip === 1) {
+ conn.reply(m.chat, `Tail ๐ช`, m);
+ } else {
+ conn.reply(m.chat, `Head ๐ช`, m);
+ }
+}
+handler.help = ['flipcoin'];
+handler.tags = ['game'];
+handler.command = /^(flip|flipcoin)$/i;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/GURU-Dalle.js b/plugins/GURU-Dalle.js
index b86cc4d6..fe3b59b0 100644
--- a/plugins/GURU-Dalle.js
+++ b/plugins/GURU-Dalle.js
@@ -1,26 +1,30 @@
-import fetch from 'node-fetch';
+import fetch from 'node-fetch'
+import uploadImage from '../lib/uploadImage.js'
let handler = async (m, { conn, text, usedPrefix, command }) => {
- if (!text) throw `*This command generates images from text prompts*\n\n*๐ดxample usage*\n*โ ${usedPrefix + command} Beautiful anime girl*\n*โ ${usedPrefix + command} Elon Musk in pink output*`;
+ if (!text)
+ throw `*This command generates images from text prompts*\n\n*๐ดxample usage*\n*โ ${usedPrefix + command} Beautiful anime girl*\n*โ ${usedPrefix + command} Elon Musk in pink output*`
try {
- m.reply('*Please wait, generating images...*');
+ m.reply('*Please wait, generating images...*')
+
+ const endpoint = `https://api.gurusensei.workers.dev/dream?prompt=${encodeURIComponent(text)}`
+ const response = await fetch(endpoint)
- const endpoint = `https://gurugpt.cyclic.app/dalle?prompt=${encodeURIComponent(text)}`;
- const response = await fetch(endpoint);
-
if (response.ok) {
- const imageBuffer = await response.buffer();
- await conn.sendFile(m.chat, imageBuffer, 'image.png', null, m);
+ const imageBuffer = await response.buffer()
+ let imgurl = await uploadImage(imageBuffer)
+ await conn.sendButton(m.chat,'Here is your Result', author, imgurl, [['MENU', `${usedPrefix}menu`]], null, [['WATCH ANIME', `https://www.anime-planet.com/anime/watch-online/`]], m)
} else {
- throw '*Image generation failed*';
+ throw '*Image generation failed*'
}
} catch {
- throw '*Oops! Something went wrong while generating images. Please try again later.*';
+ throw '*Oops! Something went wrong while generating images. Please try again later.*'
}
-};
+}
+
+handler.help = ['dalle']
+handler.tags = ['AI']
+handler.command = ['dalle', 'gen', 'imagine', 'openai2']
+export default handler
-handler.help = ['dalle'];
-handler.tags = ['AI'];
-handler.command = ['dalle', 'gen', 'gimg', 'openai2'];
-export default handler;
diff --git a/plugins/GURU-Openai.js b/plugins/GURU-Openai.js
index fe33492f..1713de73 100644
--- a/plugins/GURU-Openai.js
+++ b/plugins/GURU-Openai.js
@@ -1,77 +1,55 @@
-import fetch from 'node-fetch';
+import fetch from 'node-fetch'
let handler = async (m, { text, conn, usedPrefix, command }) => {
if (!text && !(m.quoted && m.quoted.text)) {
- throw `Please provide some text or quote a message to get a response.`;
+ throw `Please provide some text or quote a message to get a response.`
}
if (!text && m.quoted && m.quoted.text) {
- text = m.quoted.text;
+ text = m.quoted.text
}
try {
m.react(rwait)
- const { key } = await conn.sendMessage(m.chat, {
- image: { url: 'https://i.imgur.com/e0iJXPA.jpeg' },
- caption: 'sแดแดส-แดแด
-แดษช-ษชs-แดสษชษดแดษชษดษข....'
- }, {quoted: m})
- conn.sendPresenceUpdate('composing', m.chat);
- const prompt = encodeURIComponent(text);
- const guru1 = `${gurubot}/chatgpt?text=${prompt}`;
-
+ conn.sendPresenceUpdate('composing', m.chat)
+ const prompt = encodeURIComponent(text)
+
+ const guru1 = `https://api.gurusensei.workers.dev/llama?prompt=${prompt}`
+
try {
- let response = await fetch(guru1);
- let data = await response.json();
- let result = data.result;
+ let response = await fetch(guru1)
+ let data = await response.json()
+ let result = data.response.response
if (!result) {
-
- throw new Error('No valid JSON response from the first API');
+ throw new Error('No valid JSON response from the first API')
}
- await conn.relayMessage(m.chat, {
- protocolMessage: {
- key,
- type: 14,
- editedMessage: {
- imageMessage: { caption: result }
- }
- }
- }, {});
- m.react(done);
+ await conn.sendButton(m.chat,result, author, 'https://ibb.co/ZxfDcW0', [['Script', `${usedPrefix}script`]], null, [['Fork Repo', `https://github.com/Xcelsama/STAR-MD-V2/fork`]], m)
+ m.react(done)
} catch (error) {
- console.error('Error from the first API:', error);
+ console.error('Error from the first API:', error)
-
- const model = 'llama';
- const senderNumber = m.sender.replace(/[^0-9]/g, '');
- const session = `GURU_BOT_${senderNumber}`;
- const guru2 = `https://ultimetron.guruapi.tech/gpt3?prompt=${prompt}`;
-
- let response = await fetch(guru2);
- let data = await response.json();
- let result = data.completion;
+ //const model = 'llama'
+ // const senderNumber = m.sender.replace(/[^0-9]/g, '')
+ //const session = `xlicon_bot_${senderNumber}`
+ const guru2 = `https://ultimetron.guruapi.tech/gpt3?prompt=${prompt}`
- await conn.relayMessage(m.chat, {
- protocolMessage: {
- key,
- type: 14,
- editedMessage: {
- imageMessage: { caption: result }
- }
- }
- }, {});
- m.react(done);
- }
+ let response = await fetch(guru2)
+ let data = await response.json()
+ let result = data.completion
+ await conn.sendButton(m.chat,result, author, 'https://ibb.co/ZxfDcW0', [['Script', `.sc`]], null, [['Fork Repo', `https://github.com/Xcelsama/STAR-MD-V2/fork`]], m)
+ m.react(done)
+ }
} catch (error) {
- console.error('Error:', error);
- throw `*ERROR*`;
+ console.error('Error:', error)
+ throw `*ERROR*`
}
-};
+}
handler.help = ['chatgpt']
handler.tags = ['AI']
-handler.command = ['bro', 'chatgpt', 'ai', 'gpt'];
+handler.command = ['bro', 'chatgpt', 'ai', 'gpt']
-export default handler;
+export default handler
\ No newline at end of file
diff --git a/plugins/GURU-aisearch.js b/plugins/GURU-aisearch.js
index d24c7e87..907718ba 100644
--- a/plugins/GURU-aisearch.js
+++ b/plugins/GURU-aisearch.js
@@ -1,52 +1,55 @@
-import fetch from 'node-fetch';
+import fetch from 'node-fetch'
import displayLoadingScreen from '../lib/loading.js'
-const endpoint = 'https://v2-guru-indratensei.cloud.okteto.net/perplexity?query=';
+const endpoint = 'https://v2-guru-indratensei.cloud.okteto.net/perplexity?query='
let handler = async (m, { text, conn, usedPrefix, command }) => {
try {
if (!text && !(m.quoted && m.quoted.text)) {
- throw `Please provide some text or quote a message to get a response.`;
+ throw `Please provide some text or quote a message to get a response.`
}
if (!text && m.quoted && m.quoted.text) {
- text = m.quoted.text;
+ text = m.quoted.text
} else if (text && m.quoted && m.quoted.text) {
- text = `${text} ${m.quoted.text}`;
+ text = `${text} ${m.quoted.text}`
if (m.quoted.text.includes('.aisearch')) {
- text = text.replace('.aisearch', ''); //
+ text = text.replace('.aisearch', '') //
}
}
await displayLoadingScreen(conn, m.chat)
- conn.sendPresenceUpdate('composing', m.chat);
- let emsg = await conn.sendMessage(m.chat, {text: 'Thinking...'})
- const prompt = encodeURIComponent(text);
+ conn.sendPresenceUpdate('composing', m.chat)
+ let emsg = await conn.sendMessage(m.chat, { text: 'Thinking...' })
+ const prompt = encodeURIComponent(text)
- const response = await fetch(endpoint + prompt);
+ const response = await fetch(endpoint + prompt)
if (!response.ok) {
- throw `Received an error response from the server: ${response.status} - ${response.statusText}`;
+ throw `Received an error response from the server: ${response.status} - ${response.statusText}`
}
- const data = await response.json();
- const result = data.response.trim();
- await conn.relayMessage(m.chat, {
+ const data = await response.json()
+ const result = data.response.trim()
+ await conn.relayMessage(
+ m.chat,
+ {
protocolMessage: {
key: emsg.key,
type: 14,
editedMessage: {
- conversation: result
- }
- }
- }, {})
+ conversation: result,
+ },
+ },
+ },
+ {}
+ )
} catch (error) {
- console.error('Error:', error);
- m.reply(`An error occurred while processing your request. Please try again later.`);
+ console.error('Error:', error)
+ m.reply(`An error occurred while processing your request. Please try again later.`)
}
-};
+}
handler.help = ['aisearch']
handler.tags = ['AI']
-handler.command = ['aisearch', 'ai2'];
+handler.command = ['aisearch', 'ai2']
-
-export default handler;
+export default handler
\ No newline at end of file
diff --git a/plugins/GURU-gemini.js b/plugins/GURU-gemini.js
index 836a91d2..a6c6a367 100644
--- a/plugins/GURU-gemini.js
+++ b/plugins/GURU-gemini.js
@@ -24,4 +24,4 @@ handler.help = ['gemini ']
handler.tags = ['tools']
handler.command = /^(gemini)$/i
-export default handler
+export default handler
\ No newline at end of file
diff --git a/plugins/GURU-nowa.js b/plugins/GURU-nowa.js
index ebee048f..054026ea 100644
--- a/plugins/GURU-nowa.js
+++ b/plugins/GURU-nowa.js
@@ -21,4 +21,4 @@ handler.tags = ['tools']
export default handler
function formatDate(n, locale = 'in') {
let d = new Date(n)
- return d.toLocaleDateString(locale, { timeZone: 'Asia/Kolkata' })}
+ return d.toLocaleDateString(locale, { timeZone: 'Africa/Lagos' })}
diff --git a/plugins/GURU-weather.js b/plugins/GURU-weather.js
index e2303252..748a1045 100644
--- a/plugins/GURU-weather.js
+++ b/plugins/GURU-weather.js
@@ -12,11 +12,12 @@ const Minimum_Temperature = res.data.main.temp_min + "ยฐC"
const Maximum_Temperature = res.data.main.temp_max + "ยฐC"
const Humidity = res.data.main.humidity + "%"
const Wind = res.data.wind.speed + "km/h"
-const wea = sแดแดส-แดแด
-แด 2 แดกแดแดแดสแดส sแดแดสแดส`ใ ๐ ใPLACE: ${name}\nใ ๐บ๏ธ ใCOUNTRY: ${Country}\nใ ๐ค๏ธ ใVIEW: ${Weather}\nใ ๐ก๏ธ ใTEMPERATURE: ${Temperature}\nใ ๐ ใ MINIMUM TEMPERATURE: ${Minimum_Temperature}\nใ ๐ ใ MAXIMUM TEMPERATURE: ${Maximum_Temperature}\nใ ๐ฆ ใHUMIDITY: ${Humidity}\nใ ๐ฌ๏ธ ใ WINDSPEED: ${Wind}`
+const wea = `ใ ๐ ใPLACE: ${name}\nใ ๐บ๏ธ ใCOUNTRY: ${Country}\nใ ๐ค๏ธ ใVIEW: ${Weather}\nใ ๐ก๏ธ ใTEMPERATURE: ${Temperature}\nใ ๐ ใ MINIMUM TEMPERATURE: ${Minimum_Temperature}\nใ ๐ ใ MAXIMUM TEMPERATURE: ${Maximum_Temperature}\nใ ๐ฆ ใHUMIDITY: ${Humidity}\nใ ๐ฌ๏ธ ใ WINDSPEED: ${Wind}
+ยฉSTAR-MD WEATHER`
m.reply(wea)
} catch {
return "*ERROR*"}}
handler.help = ['weather **']
handler.tags = ['tools']
handler.command = /^(climate|weather)$/i
-export default handler
+export default handler
\ No newline at end of file
diff --git a/plugins/Getbio.js b/plugins/Getbio.js
new file mode 100644
index 00000000..96edb725
--- /dev/null
+++ b/plugins/Getbio.js
@@ -0,0 +1,23 @@
+let handler = async (m, { conn, text, command }) => {
+ try {
+ let who
+ if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted.sender
+ else who = m.quoted.sender ? m.quoted.sender : m.sender
+ let bio = await conn.fetchStatus(who)
+ m.reply(bio.status)
+ } catch {
+ if (text) throw `bio is private!`
+ else try {
+ let who = m.quoted ? m.quoted.sender : m.sender
+ let bio = await conn.fetchStatus(who)
+ m.reply(bio.status)
+ } catch {
+ throw `bio is private!`
+ }
+ }
+}
+handler.help = ['getbio <@tag/reply>']
+handler.tags = ['group']
+handler.command = /^(getb?io)$/i
+handler.limit = true
+export default handler
\ No newline at end of file
diff --git a/plugins/Gpt5.0.js b/plugins/Gpt5.0.js
index 42486fce..ce19babb 100644
--- a/plugins/Gpt5.0.js
+++ b/plugins/Gpt5.0.js
@@ -1,38 +1,51 @@
-// NO GITA STUFF ALLOWED
-import fetch from 'node-fetch';
+import displayLoadingScreen from '../lib/loading.js'
+import fetch from 'node-fetch'
+import { delay } from '@whiskeysockets/baileys'
-const handler = async (m, {conn, text, usedPrefix, command}) => {
- if (!text && !(m.quoted && m.quoted.text)) {
- if (!text) {
- throw `*_Need query._*\n*_Example:_* _${usedPrefix + command} When did Jesus Christ die?_`;
- }
- }
- if (!text && m.quoted && m.quoted.text) {
- text = m.quoted.text;
- }
-
- m.react('โก')
+let handler = async (m, { conn, text, args, usedPrefix, command }) => {
try {
- conn.sendPresenceUpdate('composing', m.chat);
-
+ if (!text) throw `uhm.. what do you want to say?`
+ m.react('๐ค')
+ //await displayLoadingScreen(conn, m.chat)
- const API_URL = `https://vihangayt.me/tools/chatgpt5?q=Hi${encodeURIComponent(text)}`;
- const response = await fetch(API_URL);
- const data = await response.json();
+ const prompt = encodeURIComponent(text)
+ let apiurl = `https://ultimetron.guruapi.tech/gpt4?prompt=${prompt}`
- m.react(done)
- if (data.status && data.data) {
- const respuestaAPI = data.data;
- conn.reply(m.chat, respuestaAPI, m);
- } else {
- throw '*Could not get a valid answer sorry ๐
.*';
- }
+ const result = await fetch(apiurl)
+ const response = await result.json()
+ console.log(response)
+ const textt = response.result.reply
+ await typewriterEffect(conn, m, m.chat, textt)
} catch (error) {
- throw `*oops api error. Please try again later๐
.*`;
+ console.error(error)
+ m.reply('Oops! Something went wrong. , we are trying had to fix it asap')
}
-};
+}
+handler.help = ['gemini ']
+handler.tags = ['tools']
+handler.command = /^(gpt4)$/i
-handler.command = /^gpt5$/i;
-handler.tags = ['study'];
+export default handler
-export default handler;
+async function typewriterEffect(conn, quoted, from, text) {
+ let { key } = await conn.sendMessage(from, { text: 'Thinking...' }, { quoted: quoted })
+
+ for (let i = 0; i < text.length; i++) {
+ const noobText = text.slice(0, i + 1)
+ await conn.relayMessage(
+ from,
+ {
+ protocolMessage: {
+ key: key,
+ type: 14,
+ editedMessage: {
+ conversation: noobText,
+ },
+ },
+ },
+ {}
+ )
+
+ await delay(100) // Adjust the delay time (in milliseconds) as needed
+ }
+}
\ No newline at end of file
diff --git a/plugins/Main-DEVS.js b/plugins/Main-DEVS.js
index d368c9e7..8a1b4a82 100644
--- a/plugins/Main-DEVS.js
+++ b/plugins/Main-DEVS.js
@@ -1,23 +1,11 @@
-var handler = async (m, { conn, command, args, usedPrefix, DevMode }) => {
-let fkontak = { "key": { "participants":"0@s.whatsapp.net", "remoteJid": "status@broadcast", "fromMe": false, "id": "๐๐๐ฒ" }, "message":{ "contactMessage": { "vcard": `BEGIN:VCARD\nVERSION:3.0\nN:Sy;Bot;;;\nFN:y\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD` }}, "participant": "0@s.whatsapp.net" }
- let pp = './Assets/XLICON-V2.jpg'
-
-const cat = `*_XLICON-V2_*
-
-
-*_โ๐ฐ ๐๐๐๐-๐๐ ๐๐๐ ๐ wa.me/+2347045035241 %i'm here to help%_*
-
-*_โ๐ฐ ๐๐๐๐-๐๐ ๐๐๐ 2 wa.me/+2347045038687_*
-*---------------------*
-
-
-*_แดสแด แดแดแด
แดสแดแดแดส_*
-*${developer}*`
-
-await conn.sendFile(m.chat, pp, 'menuvid', cat, fkontak)
-}
-handler.help = ['devi','maindev']
+let handler = async m => m.reply(`
+- MAIN DEV:-EXCEL:-wa.me/+2347045035241
+- โน๏ธFOLLOW DEVELOPER:- https://github.com/Xcelsama
+- GET IN TOUCH
+https://linktr.ee/Xcelsama
+`.trim())
+handler.help = ['maindev']
handler.tags = ['info']
-handler.command = /^(maindev|devi)$/i
+handler.command = ['maindev', 'devi']
-export default handler
+export default handler
\ No newline at end of file
diff --git a/plugins/Main-logo2.js b/plugins/Main-logo2.js
index 0d557547..e69de29b 100644
--- a/plugins/Main-logo2.js
+++ b/plugins/Main-logo2.js
@@ -1,884 +0,0 @@
-import axios from 'axios'
-let split = '|'
-let handler = async (m, { conn, args: [effect], text: txt, usedPrefix, command, name }) => {
-if (!effect) throw '*ยฟcorrect use of command?*\nโโ _#logo (efect) (text)_\n*๐ดxample:*\nโโ _#logo2 3d-deep-sea-metal Star_\n\n*[โ] when two text is needed, use:*\nโโ _#logo2 (efect) (text1|text2)_\n*๐ดxample:*\nโโ _#logo2 Wolf-Logo-Galaxy STAR-v2|Bot\n\n*<๐ณ๐ฐ๐บ๐ป ๐ฌ๐ญ๐ฌ๐ช๐ป๐บ/>*\n\nยฐ เถฌโ๐ #logo2 ' + effects.map(v => v.title).join('\nยฐ เถฌโ๐ #logo2 *')
-effect = effect.toLowerCase()
-if (!effects.find(v => (new RegExp(v.title, 'gi')).test(effect))) throw `*this ${effect} can not find this*`
-let text = txt.replace(new RegExp(effect, 'gi'), '').trimStart()
-if (text.includes(split)) text = text.split(split)
-text = Array.isArray(text) ? text : [text]
-let res = await textpro(effect, ...text)
-if (typeof res == 'number') throw res == -1 ? `*[โ๐๐๐
๐โ] ${effect} ๐ฝot found*` : `*use correct format ${usedPrefix + command} ${effect} ${new Array(res).fill('texto').map((v, i) => v + (i ? i + 1 : '')).join('|')}*`
-let result = await axios.get(res, {
-responseType: 'arraybuffer'
-})
-await conn.sendFile(m.chat, result.data, 'Error.jpg', `*PROCESSING!!*\n*EFFECT: ${effect}*`, m)
-}
-handler.help = ['main']
-handler.tags = ['logo2']
-handler.command = /^(logo2|logi2)$/i
-export default handler
-
-import formData from 'form-data'
-import fetch from 'node-fetch'
-import cheerio from 'cheerio'
-var effects = [
- {
- "title": "seametal",
- "url": "https://textpro.me/create-3d-deep-sea-metal-text-effect-online-1053.html"
- },
- {
- "title": "Americanflag",
- "url": "https://textpro.me/create-american-flag-3d-text-effect-online-1051.html"
- },
- {
- "title": "scifi",
- "url": "https://textpro.me/create-3d-sci-fi-text-effect-online-1050.html"
- },
- {
- "title": "calligraphy",
- "url": "https://textpro.me/3d-rainbow-color-calligraphy-text-effect-1049.html"
- },
- {
- "title": "3D-water-pipe",
- "url": "https://textpro.me/create-3d-water-pipe-text-effects-online-1048.html"
- },
- {
- "title": "Halloween-skeleton",
- "url": "https://textpro.me/create-halloween-skeleton-text-effect-online-1047.html"
- },
- {
- "title": "a-spooky-Halloween",
- "url": "https://textpro.me/create-a-spooky-halloween-text-effect-online-1046.html"
- },
- {
- "title": "a-cinematic-horror",
- "url": "https://textpro.me/create-a-cinematic-horror-text-effect-1045.html"
- },
- {
- "title": "a-sketch",
- "url": "https://textpro.me/create-a-sketch-text-effect-online-1044.html"
- },
- {
- "title": "blue-circuit-style",
- "url": "https://textpro.me/create-blue-circuit-style-text-effect-online-1043.html"
- },
- {
- "title": "space",
- "url": "https://textpro.me/create-space-text-effects-online-free-1042.html"
- },
- {
- "title": "a-metallic",
- "url": "https://textpro.me/create-a-metallic-text-effect-free-online-1041.html"
- },
- {
- "title": "Creat-glossy-metalic",
- "url": "https://textpro.me/creat-glossy-metalic-text-effect-free-online-1040.html"
- },
- {
- "title": "a-Captain-America",
- "url": "https://textpro.me/create-a-captain-america-text-effect-free-online-1039.html"
- },
- {
- "title": "science-fiction",
- "url": "https://textpro.me/create-science-fiction-text-effect-online-free-1038.html"
- },
- {
- "title": "Video-game-classic-8-bit",
- "url": "https://textpro.me/video-game-classic-8-bit-text-effect-1037.html"
- },
- {
- "title": "green-horror-style",
- "url": "https://textpro.me/create-green-horror-style-text-effect-online-1036.html"
- },
- {
- "title": "a-transformer",
- "url": "https://textpro.me/create-a-transformer-text-effect-online-1035.html"
- },
- {
- "title": "berry",
- "url": "https://textpro.me/create-berry-text-effect-online-free-1033.html"
- },
- {
- "title": "layered",
- "url": "https://textpro.me/create-layered-text-effects-online-free-1032.html"
- },
- {
- "title": "Online-thunder--generator",
- "url": "https://textpro.me/online-thunder-text-effect-generator-1031.html"
- },
- {
- "title": "a-magma-hot",
- "url": "https://textpro.me/create-a-magma-hot-text-effect-online-1030.html"
- },
- {
- "title": "3D-stone-cracked-cool",
- "url": "https://textpro.me/3d-stone-cracked-cool-text-effect-1029.html"
- },
- {
- "title": "3D-neon-light",
- "url": "https://textpro.me/create-3d-neon-light-text-effect-online-1028.html"
- },
- {
- "title": "impressive-glitch",
- "url": "https://textpro.me/create-impressive-glitch-text-effects-online-1027.html"
- },
- {
- "title": "a-glitch",
- "url": "https://textpro.me/create-a-glitch-text-effect-online-free-1026.html"
- },
- {
- "title": "Harry-Potter",
- "url": "https://textpro.me/create-harry-potter-text-effect-online-1025.html"
- },
- {
- "title": "embossed--on-cracked-surface",
- "url": "https://textpro.me/create-embossed-text-effect-on-cracked-surface-1024.html"
- },
- {
- "title": "Broken-glass",
- "url": "https://textpro.me/broken-glass-text-effect-free-online-1023.html"
- },
- {
- "title": "art-paper-cut",
- "url": "https://textpro.me/create-art-paper-cut-text-effect-online-1022.html"
- },
- {
- "title": "artistic-black-and-white-status-and-quote-with-your-photos",
- "url": "https://textpro.me/create-artistic-black-and-white-status-and-quote-with-your-photos-1021.html"
- },
- {
- "title": "Online-3D-gradient--generator",
- "url": "https://textpro.me/online-3d-gradient-text-effect-generator-1020.html"
- },
- {
- "title": "a-3D-glossy-metal",
- "url": "https://textpro.me/create-a-3d-glossy-metal-text-effect-1019.html"
- },
- {
- "title": "3D-realistic--on-the-beach",
- "url": "https://textpro.me/create-3d-realistic-text-effect-on-the-beach-online-1018.html"
- },
- {
- "title": "a-watercolor",
- "url": "https://textpro.me/create-a-free-online-watercolor-text-effect-1017.html"
- },
- {
- "title": "Online-multicolor-3D-paper-cut",
- "url": "https://textpro.me/online-multicolor-3d-paper-cut-text-effect-1016.html"
- },
- {
- "title": "Write-text-on-foggy-window",
- "url": "https://textpro.me/write-text-on-foggy-window-online-free-1015.html"
- },
- {
- "title": "neon-devil-wings",
- "url": "https://textpro.me/create-neon-devil-wings-text-effect-online-free-1014.html"
- },
- {
- "title": "3D-underwater--generator",
- "url": "https://textpro.me/3d-underwater-text-effect-generator-online-1013.html"
- },
- {
- "title": "Online-black-and-white-bear-mascot-logo-creation",
- "url": "https://textpro.me/online-black-and-white-bear-mascot-logo-creation-1012.html"
- },
- {
- "title": "wonderful-graffiti-art",
- "url": "https://textpro.me/create-wonderful-graffiti-art-text-effect-1011.html"
- },
- {
- "title": "a-cool-graffiti-text-on-the-wall",
- "url": "https://textpro.me/create-a-cool-graffiti-text-on-the-wall-1010.html"
- },
- {
- "title": "cool-wall-graffiti",
- "url": "https://textpro.me/create-cool-wall-graffiti-text-effect-online-1009.html"
- },
- {
- "title": "a-christmas-holiday-snow",
- "url": "https://textpro.me/create-a-christmas-holiday-snow-text-effect-1007.html"
- },
- {
- "title": "a-futuristic-technology-neon-light",
- "url": "https://textpro.me/create-a-futuristic-technology-neon-light-text-effect-1006.html"
- },
- {
- "title": "snow--for-winter-holidays",
- "url": "https://textpro.me/create-snow-text-effects-for-winter-holidays-1005.html"
- },
- {
- "title": "a-cloud--on-the-sky",
- "url": "https://textpro.me/create-a-cloud-text-effect-on-the-sky-online-1004.html"
- },
- {
- "title": "3D-luxury-gold",
- "url": "https://textpro.me/3d-luxury-gold-text-effect-online-1003.html"
- },
- {
- "title": "3D-gradient",
- "url": "https://textpro.me/3d-gradient-text-effect-online-free-1002.html"
- },
- {
- "title": "Blackpink-logo-style",
- "url": "https://textpro.me/create-blackpink-logo-style-online-1001.html"
- },
- {
- "title": "realistic-vintage-style-light-bulb",
- "url": "https://textpro.me/create-realistic-vintage-style-light-bulb-1000.html"
- },
- {
- "title": "realistic-cloud",
- "url": "https://textpro.me/create-realistic-cloud-text-effect-online-free-999.html"
- },
- {
- "title": "a-cloud--in-the-sky",
- "url": "https://textpro.me/create-a-cloud-text-effect-in-the-sky-online-997.html"
- },
- {
- "title": "Write-in-Sand-Summer-Beach",
- "url": "https://textpro.me/write-in-sand-summer-beach-free-online-991.html"
- },
- {
- "title": "Sand-Writing",
- "url": "https://textpro.me/sand-writing-text-effect-online-990.html"
- },
- {
- "title": "Sand-engraved-3d",
- "url": "https://textpro.me/sand-engraved-3d-text-effect-989.html"
- },
- {
- "title": "a-summery-sand-writing",
- "url": "https://textpro.me/create-a-summery-sand-writing-text-effect-988.html"
- },
- {
- "title": "Foil-Balloon--For-Birthday",
- "url": "https://textpro.me/foil-balloon-text-effect-for-birthday-987.html"
- },
- {
- "title": "3d-glue--with-realistic-style",
- "url": "https://textpro.me/create-3d-glue-text-effect-with-realistic-style-986.html"
- },
- {
- "title": "space-3D",
- "url": "https://textpro.me/create-space-3d-text-effect-online-985.html"
- },
- {
- "title": "Metal-Dark-Gold",
- "url": "https://textpro.me/metal-dark-gold-text-effect-984.html"
- },
- {
- "title": "Glitch--Style-Tik-Tok",
- "url": "https://textpro.me/create-glitch-text-effect-style-tik-tok-983.html"
- },
- {
- "title": "a-Stone",
- "url": "https://textpro.me/create-a-stone-text-effect-online-982.html"
- },
- {
- "title": "Neon-Light--With-Galaxy-Style",
- "url": "https://textpro.me/neon-light-text-effect-with-galaxy-style-981.html"
- },
- {
- "title": "1917-Style",
- "url": "https://textpro.me/1917-style-text-effect-online-980.html"
- },
- {
- "title": "80's-Retro-Neon",
- "url": "https://textpro.me/80-s-retro-neon-text-effect-online-979.html"
- },
- {
- "title": "Minion--3D",
- "url": "https://textpro.me/minion-text-effect-3d-online-978.html"
- },
- {
- "title": "Pornhub-Style-Logo",
- "url": "https://textpro.me/pornhub-style-logo-online-generator-free-977.html"
- },
- {
- "title": "Double-Exposure--Black-&-White",
- "url": "https://textpro.me/double-exposure-text-effect-black-white-976.html"
- },
- {
- "title": "Holographic-3D",
- "url": "https://textpro.me/holographic-3d-text-effect-975.html"
- },
- {
- "title": "avenger",
- "url": "https://textpro.me/create-3d-avengers-logo-online-974.html"
- },
- {
- "title": "Metal-Purple-Dual-Effect",
- "url": "https://textpro.me/metal-purple-dual-effect-973.html"
- },
- {
- "title": "metamarvel",
- "url": "https://textpro.me/create-logo-style-marvel-studios-ver-metal-972.html"
- },
- {
- "title": "marvel",
- "url": "https://textpro.me/create-logo-style-marvel-studios-online-971.html"
- },
- {
- "title": "Silver",
- "url": "https://textpro.me/deluxe-silver-text-effect-970.html"
- },
- {
- "title": "Color-Full-Luxury-Metal",
- "url": "https://textpro.me/color-full-luxury-metal-text-effect-969.html"
- },
- {
- "title": "Glossy-Blue-Metal",
- "url": "https://textpro.me/glossy-blue-metal-text-effect-967.html"
- },
- {
- "title": "Deluxe-Gold",
- "url": "https://textpro.me/deluxe-gold-text-effect-966.html"
- },
- {
- "title": "Glossy-Carbon",
- "url": "https://textpro.me/glossy-carbon-text-effect-965.html"
- },
- {
- "title": "Fabric",
- "url": "https://textpro.me/fabric-text-effect-online-964.html"
- },
- {
- "title": "Neon",
- "url": "https://textpro.me/neon-text-effect-online-963.html"
- },
- {
- "title": "New-Year-Cards-3D-By-Name",
- "url": "https://textpro.me/new-year-cards-3d-by-name-960.html"
- },
- {
- "title": "Happ-new-year-card-firework-gif",
- "url": "https://textpro.me/happ-new-year-card-firework-gif-959.html"
- },
- {
- "title": "Fullcolor-Balloon",
- "url": "https://textpro.me/fullcolor-balloon-text-effect-958.html"
- },
- {
- "title": "Text-Logo-3D-Metal",
- "url": "https://textpro.me/create-text-logo-3d-metal-online-957.html"
- },
- {
- "title": "avatar",
- "url": "https://textpro.me/create-avatar-gold-online-956.html"
- },
- {
- "title": "Text-Logo-3D-Metal-Silver",
- "url": "https://textpro.me/text-logo-3d-metal-silver-946.html"
- },
- {
- "title": "Text-Logo-3D-Metal-Rose-Gold",
- "url": "https://textpro.me/text-logo-3d-metal-rose-gold-945.html"
- },
- {
- "title": "Text-Logo-3D-Metal-Gold",
- "url": "https://textpro.me/text-logo-3d-metal-gold-944.html"
- },
- {
- "title": "Text-Logo-3D-Metal-Galaxy",
- "url": "https://textpro.me/text-logo-3d-metal-galaxy-943.html"
- },
- {
- "title": "Xmas-Cards-3D",
- "url": "https://textpro.me/xmas-cards-3d-online-942.html"
- },
- {
- "title": "Blood-Text-On-The-Frosted-Glass",
- "url": "https://textpro.me/blood-text-on-the-frosted-glass-941.html"
- },
- {
- "title": "Halloween-Fire",
- "url": "https://textpro.me/halloween-fire-text-effect-940.html"
- },
- {
- "title": "Metal-Dark-Gold",
- "url": "https://textpro.me/metal-dark-gold-text-effect-online-939.html"
- },
- {
- "title": "Lion-Logo-Mascot",
- "url": "https://textpro.me/create-lion-logo-mascot-online-938.html"
- },
- {
- "title": "Wolf-Logo-Black-&-White",
- "url": "https://textpro.me/create-wolf-logo-black-white-937.html"
- },
- {
- "title": "Wolf-Logo-Galaxy",
- "url": "https://textpro.me/create-wolf-logo-galaxy-online-936.html"
- },
- {
- "title": "Ninja",
- "url": "https://textpro.me/create-ninja-logo-online-935.html"
- },
- {
- "title": "Joker",
- "url": "https://textpro.me/create-logo-joker-online-934.html"
- },
- {
- "title": "Wicker",
- "url": "https://textpro.me/wicker-text-effect-online-932.html"
- },
- {
- "title": "NaturalLeaves",
- "url": "https://textpro.me/natural-leaves-text-effect-931.html"
- },
- {
- "title": "Sparkle",
- "url": "https://textpro.me/firework-sparkle-text-effect-930.html"
- },
- {
- "title": "Skeleton",
- "url": "https://textpro.me/skeleton-text-effect-online-929.html"
- },
- {
- "title": "RedBalloon",
- "url": "https://textpro.me/red-foil-balloon-text-effect-928.html"
- },
- {
- "title": "PurpleBalloon",
- "url": "https://textpro.me/purple-foil-balloon-text-effect-927.html"
- },
- {
- "title": "PinkBalloon",
- "url": "https://textpro.me/pink-foil-balloon-text-effect-926.html"
- },
- {
- "title": "GreenBalloon",
- "url": "https://textpro.me/green-foil-balloon-text-effect-925.html"
- },
- {
- "title": "CyanBalloon",
- "url": "https://textpro.me/cyan-foil-balloon-text-effect-924.html"
- },
- {
- "title": "BlueBalloon",
- "url": "https://textpro.me/blue-foil-balloon-text-effect-923.html"
- },
- {
- "title": "GoldBalloon",
- "url": "https://textpro.me/gold-foil-balloon-text-effect-922.html"
- },
- {
- "title": "Steel",
- "url": "https://textpro.me/steel-text-effect-online-921.html"
- },
- {
- "title": "UltraGloss",
- "url": "https://textpro.me/ultra-gloss-text-effect-online-920.html"
- },
- {
- "title": "Denim",
- "url": "https://textpro.me/denim-text-effect-online-919.html"
- },
- {
- "title": "DecorateGreen",
- "url": "https://textpro.me/decorate-green-text-effect-918.html"
- },
- {
- "title": "DecoratePurple",
- "url": "https://textpro.me/decorate-purple-text-effect-917.html"
- },
- {
- "title": "PeridotStone",
- "url": "https://textpro.me/peridot-stone-text-effect-916.html"
- },
- {
- "title": "Rock",
- "url": "https://textpro.me/rock-text-effect-online-915.html"
- },
- {
- "title": "Lava",
- "url": "https://textpro.me/lava-text-effect-online-914.html"
- },
- {
- "title": "YellowGlass",
- "url": "https://textpro.me/yellow-glass-text-effect-913.html"
- },
- {
- "title": "PurpleGlass",
- "url": "https://textpro.me/purple-glass-text-effect-912.html"
- },
- {
- "title": "OrangeGlass",
- "url": "https://textpro.me/orange-glass-text-effect-911.html"
- },
- {
- "title": "Green-Glass",
- "url": "https://textpro.me/green-glass-text-effect-910.html"
- },
- {
- "title": "CyanGlass",
- "url": "https://textpro.me/cyan-glass-text-effect-909.html"
- },
- {
- "title": "BlueGlass",
- "url": "https://textpro.me/blue-glass-text-effect-908.html"
- },
- {
- "title": "RedGlass",
- "url": "https://textpro.me/red-glass-text-effect-907.html"
- },
- {
- "title": "PurpleShiny-Glass",
- "url": "https://textpro.me/purple-shiny-glass-text-effect-906.html"
- },
- {
- "title": "CaptainAmerica",
- "url": "https://textpro.me/captain-america-text-effect-905.html"
- },
- {
- "title": "Robot",
- "url": "https://textpro.me/robot-r2-d2-text-effect-903.html"
- },
- {
- "title": "RainbowEqualizer",
- "url": "https://textpro.me/rainbow-equalizer-text-effect-902.html"
- },
- {
- "title": "Toxic",
- "url": "https://textpro.me/toxic-text-effect-online-901.html"
- },
- {
- "title": "Pink-Sparkling-Jewelry",
- "url": "https://textpro.me/pink-sparkling-jewelry-text-effect-899.html"
- },
- {
- "title": "Blue-Sparkling-Jewelry",
- "url": "https://textpro.me/blue-sparkling-jewelry-text-effect-898.html"
- },
- {
- "title": "Green-Sparkling-Jewelry",
- "url": "https://textpro.me/green-sparkling-jewelry-text-effect-897.html"
- },
- {
- "title": "Purple-Sparkling-Jewelry",
- "url": "https://textpro.me/purple-sparkling-jewelry-text-effect-896.html"
- },
- {
- "title": "Gold-Sparkling-Jewelry",
- "url": "https://textpro.me/gold-sparkling-jewelry-text-effect-895.html"
- },
- {
- "title": "Red-Sparkling-Jewelry",
- "url": "https://textpro.me/red-sparkling-jewelry-text-effect-894.html"
- },
- {
- "title": "Cyan-Sparkling-Jewelry",
- "url": "https://textpro.me/cyan-sparkling-jewelry-text-effect-893.html"
- },
- {
- "title": "Purple-Glass",
- "url": "https://textpro.me/purple-glass-text-effect-online-892.html"
- },
- {
- "title": "Decorative-Glass",
- "url": "https://textpro.me/decorative-glass-text-effect-891.html"
- },
- {
- "title": "Chocolate-Cake",
- "url": "https://textpro.me/chocolate-cake-text-effect-890.html"
- },
- {
- "title": "Strawberry",
- "url": "https://textpro.me/strawberry-text-effect-online-889.html"
- },
- {
- "title": "Koi-Fish",
- "url": "https://textpro.me/koi-fish-text-effect-online-888.html"
- },
- {
- "title": "Bread",
- "url": "https://textpro.me/bread-text-effect-online-887.html"
- },
- {
- "title": "Matrix-Style",
- "url": "https://textpro.me/matrix-style-text-effect-online-884.html"
- },
- {
- "title": "Horror-Blood",
- "url": "https://textpro.me/horror-blood-text-effect-online-883.html"
- },
- {
- "title": "Neon-Light",
- "url": "https://textpro.me/neon-light-text-effect-online-882.html"
- },
- {
- "title": "Thunder",
- "url": "https://textpro.me/create-thunder-text-effect-online-881.html"
- },
- {
- "title": "3D-Box",
- "url": "https://textpro.me/3d-box-text-effect-online-880.html"
- },
- {
- "title": "Neon",
- "url": "https://textpro.me/neon-text-effect-online-879.html"
- },
- {
- "title": "Road-Warning",
- "url": "https://textpro.me/road-warning-text-effect-878.html"
- },
- {
- "title": "3D-Steel",
- "url": "https://textpro.me/3d-steel-text-effect-877.html"
- },
- {
- "title": "Bokeh",
- "url": "https://textpro.me/bokeh-text-effect-876.html"
- },
- {
- "title": "Green-Neon",
- "url": "https://textpro.me/green-neon-text-effect-874.html"
- },
- {
- "title": "Free-Advanced-Glow",
- "url": "https://textpro.me/free-advanced-glow-text-effect-873.html"
- },
- {
- "title": "Dropwater",
- "url": "https://textpro.me/dropwater-text-effect-872.html"
- },
- {
- "title": "Break-Wall",
- "url": "https://textpro.me/break-wall-text-effect-871.html"
- },
- {
- "title": "Chrismast-Gift",
- "url": "https://textpro.me/chrismast-gift-text-effect-869.html"
- },
- {
- "title": "Honey",
- "url": "https://textpro.me/honey-text-effect-868.html"
- },
- {
- "title": "Plastic-Bag-Drug",
- "url": "https://textpro.me/plastic-bag-drug-text-effect-867.html"
- },
- {
- "title": "Horror-Gift",
- "url": "https://textpro.me/horror-gift-text-effect-866.html"
- },
- {
- "title": "Marble-Slabs",
- "url": "https://textpro.me/marble-slabs-text-effect-864.html"
- },
- {
- "title": "Marble",
- "url": "https://textpro.me/marble-text-effect-863.html"
- },
- {
- "title": "Ice-Cold",
- "url": "https://textpro.me/ice-cold-text-effect-862.html"
- },
- {
- "title": "Fruit-Juice",
- "url": "https://textpro.me/fruit-juice-text-effect-861.html"
- },
- {
- "title": "Rusty-Metal",
- "url": "https://textpro.me/rusty-metal-text-effect-860.html"
- },
- {
- "title": "Abstra-Gold",
- "url": "https://textpro.me/abstra-gold-text-effect-859.html"
- },
- {
- "title": "Biscuit",
- "url": "https://textpro.me/biscuit-text-effect-858.html"
- },
- {
- "title": "Bagel",
- "url": "https://textpro.me/bagel-text-effect-857.html"
- },
- {
- "title": "Wood",
- "url": "https://textpro.me/wood-text-effect-856.html"
- },
- {
- "title": "SCI---Fi",
- "url": "https://textpro.me/sci-fi-text-effect-855.html"
- },
- {
- "title": "Metal-Rainbow",
- "url": "https://textpro.me/metal-rainbow-text-effect-854.html"
- },
- {
- "title": "Purple-Gem",
- "url": "https://textpro.me/purple-gem-text-effect-853.html"
- },
- {
- "title": "Shiny-Metal",
- "url": "https://textpro.me/shiny-metal-text-effect-852.html"
- },
- {
- "title": "Yellow-Jewelry",
- "url": "https://textpro.me/yellow-jewelry-text-effect-851.html"
- },
- {
- "title": "Silver-Jewelry",
- "url": "https://textpro.me/silver-jewelry-text-effect-850.html"
- },
- {
- "title": "Red-Jewelry",
- "url": "https://textpro.me/red-jewelry-text-effect-849.html"
- },
- {
- "title": "Purple-Jewelry",
- "url": "https://textpro.me/purple-jewelry-text-effect-848.html"
- },
- {
- "title": "Orange-Jewelry",
- "url": "https://textpro.me/orange-jewelry-text-effect-847.html"
- },
- {
- "title": "Green-Jewelry",
- "url": "https://textpro.me/green-jewelry-text-effect-846.html"
- },
- {
- "title": "Cyan-Jewelry",
- "url": "https://textpro.me/cyan-jewelry-text-effect-845.html"
- },
- {
- "title": "Blue-Jewelry",
- "url": "https://textpro.me/blue-jewelry-text-effect-844.html"
- },
- {
- "title": "Hot-Metal",
- "url": "https://textpro.me/hot-metal-text-effect-843.html"
- },
- {
- "title": "Hexa-Golden",
- "url": "https://textpro.me/hexa-golden-text-effect-842.html"
- },
- {
- "title": "Blue-Glitter",
- "url": "https://textpro.me/blue-glitter-text-effect-841.html"
- },
- {
- "title": "Purple-Glitter",
- "url": "https://textpro.me/purple-glitter-text-effect-840.html"
- },
- {
- "title": "Pink-Glitter",
- "url": "https://textpro.me/pink-glitter-text-effect-839.html"
- },
- {
- "title": "Green-Glitter",
- "url": "https://textpro.me/green-glitter-text-effect-838.html"
- },
- {
- "title": "Silver-Glitter",
- "url": "https://textpro.me/silver-glitter-text-effect-837.html"
- },
- {
- "title": "Gold-Glitter",
- "url": "https://textpro.me/gold-glitter-text-effect-836.html"
- },
- {
- "title": "Bronze-Glitter",
- "url": "https://textpro.me/bronze-glitter-text-effect-835.html"
- },
- {
- "title": "Eroded-Metal",
- "url": "https://textpro.me/eroded-metal-text-effect-834.html"
- },
- {
- "title": "Carbon",
- "url": "https://textpro.me/carbon-text-effect-833.html"
- },
- {
- "title": "Pink-Candy",
- "url": "https://textpro.me/pink-candy-text-effect-832.html"
- },
- {
- "title": "Blue-Metal",
- "url": "https://textpro.me/blue-metal-text-effect-831.html"
- },
- {
- "title": "Blue-Gem",
- "url": "https://textpro.me/blue-gem-text-effect-830.html"
- },
- {
- "title": "Black-Metal",
- "url": "https://textpro.me/black-metal-text-effect-829.html"
- },
- {
- "title": "3D-Glowing-Metal",
- "url": "https://textpro.me/3d-glowing-metal-text-effect-828.html"
- },
- {
- "title": "3D-Chrome",
- "url": "https://textpro.me/3d-chrome-text-effect-827.html"
- }
-]
-async function textpro(effect, ...texts) {
- texts = texts.filter(v => v)
- let eff = effects.find(v => (new RegExp(v.title, 'gi')).test(effect))
- if (!eff) return -1
- let resCookie = await fetch(eff.url, {
- headers: {
- "User-Agent": "GoogleBot",
- },
- })
- let html = await resCookie.text()
- const $$$ = cheerio.load(html)
- let textRequire = [!!$$$('#text-0').length, !!$$$('#text-1').length, !!$$$('#text-2').length].filter(v => v)
- // console.log({ textRequire, texts, textRequireLength: textRequire.length, textsLength: texts.length })
- if (textRequire.length > texts.length) return textRequire.length
- let cookieParse = (cookie, query) => cookie.includes(query + '=') ? cookie.split(query + '=')[1].split(';')[0] : 'undefined'
- let hasilcookie = resCookie.headers
- .get("set-cookie")
- hasilcookie = {
- __cfduid: cookieParse(hasilcookie, '__cfduid'),
- PHPSESSID: cookieParse(hasilcookie, 'PHPSESSID')
- }
- hasilcookie = Object.entries(hasilcookie).map(([nama, value]) => nama + '=' + value).join("; ")
- const $ = cheerio.load(html)
- const token = $('input[name="token"]').attr("value")
- const form = new formData()
- for (let text of texts) form.append("text[]", text)
- form.append("submit", "Go")
- form.append("token", token)
- form.append("build_server", "https://textpro.me")
- form.append("build_server_id", 1)
- let resUrl = await fetch(eff.url, {
- method: "POST",
- headers: {
- Accept: "*/*",
- "Accept-Language": "en-US,en;q=0.9",
- "User-Agent": "GoogleBot",
- Cookie: hasilcookie,
- ...form.getHeaders(),
- },
- body: form.getBuffer(),
- })
- const $$ = cheerio.load(await resUrl.text())
- let token2 = JSON.parse($$('#form_value').eq(1).text())
- let encode = encodeURIComponent;
- let body = Object.keys(token2)
- .map((key) => {
- let vals = token2[key];
- let isArray = Array.isArray(vals);
- let keys = encode(key + (isArray ? "[]" : ""));
- if (!isArray) vals = [vals];
- let out = [];
- for (let valq of vals) out.push(keys + "=" + encode(valq));
- return out.join("&");
- })
- .join("&")
- let resImgUrl = await fetch(`https://textpro.me/effect/create-image?${body}`, {
- headers: {
- Accept: "*/*",
- "Accept-Language": "en-US,en;q=0.9",
- "User-Agent": "GoogleBot",
- Cookie: hasilcookie,
- }
- })
- let results = await resImgUrl.json()
- return 'https://textpro.me' + results.fullsize_image
- }
diff --git a/plugins/NSFW-Ass.js b/plugins/NSFW-Ass.js
new file mode 100644
index 00000000..0996e03b
--- /dev/null
+++ b/plugins/NSFW-Ass.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Ass Image ๐ด๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/ass?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['ass']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Bsdm.js b/plugins/NSFW-Bsdm.js
new file mode 100644
index 00000000..6a010f96
--- /dev/null
+++ b/plugins/NSFW-Bsdm.js
@@ -0,0 +1,20 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `BSDM Image ๐๐ซ๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/bsdm?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['bsdm']
+handler.nsfw = true
+
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Cum.js b/plugins/NSFW-Cum.js
new file mode 100644
index 00000000..49b09651
--- /dev/null
+++ b/plugins/NSFW-Cum.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Cum Image ๐ฅต๐ฆ`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/cum?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['cum']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Ero.js b/plugins/NSFW-Ero.js
new file mode 100644
index 00000000..c712dca0
--- /dev/null
+++ b/plugins/NSFW-Ero.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `ERO special ๐ฆ๐`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/ero?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsero']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-FemDom.js b/plugins/NSFW-FemDom.js
new file mode 100644
index 00000000..44d78070
--- /dev/null
+++ b/plugins/NSFW-FemDom.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Female ๐ฅ๐ฅต๐ฆ`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/femdom?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpwp);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['femdom']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Foot.js b/plugins/NSFW-Foot.js
new file mode 100644
index 00000000..36eae72b
--- /dev/null
+++ b/plugins/NSFW-Foot.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Foot Image ๐ฆต๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/foot?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpwp);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsfoot']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-GangBang.js b/plugins/NSFW-GangBang.js
new file mode 100644
index 00000000..0074ab2c
--- /dev/null
+++ b/plugins/NSFW-GangBang.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `GangBang ๐๐ฅต๐ฆ`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/gangbang?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['gangbang']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Glasses.js b/plugins/NSFW-Glasses.js
new file mode 100644
index 00000000..d8a1ac8d
--- /dev/null
+++ b/plugins/NSFW-Glasses.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Glasses Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/glasses?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpwp);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nglass']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Hentai.js b/plugins/NSFW-Hentai.js
new file mode 100644
index 00000000..8e3be69c
--- /dev/null
+++ b/plugins/NSFW-Hentai.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Hentai Image ๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/hentai?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpwp);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['hentai']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Jahy.js b/plugins/NSFW-Jahy.js
new file mode 100644
index 00000000..a8af7df8
--- /dev/null
+++ b/plugins/NSFW-Jahy.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Jahy Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/jahy?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpyt);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsjahy']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Loli.js b/plugins/NSFW-Loli.js
new file mode 100644
index 00000000..f785888b
--- /dev/null
+++ b/plugins/NSFW-Loli.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Loli Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/loli?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpyt);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsloli']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Manga.js b/plugins/NSFW-Manga.js
new file mode 100644
index 00000000..39739fec
--- /dev/null
+++ b/plugins/NSFW-Manga.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Manga Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/manga?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpyt);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsmanga']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Masterbation.js b/plugins/NSFW-Masterbation.js
new file mode 100644
index 00000000..78b6538a
--- /dev/null
+++ b/plugins/NSFW-Masterbation.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Masterbation Image ๐ฆ๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/masterbation?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpyt);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['masterbation', 'muth']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Milf.js b/plugins/NSFW-Milf.js
new file mode 100644
index 00000000..27c175e5
--- /dev/null
+++ b/plugins/NSFW-Milf.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Milf ๐ฅตโ ๏ธ`
+let endpoint = `https://shizoapi.onrender.com/api/sfw/milf?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['milf']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Nako2.js b/plugins/NSFW-Nako2.js
new file mode 100644
index 00000000..1b473417
--- /dev/null
+++ b/plugins/NSFW-Nako2.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Neko Overpowered Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/neko2?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpgc);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['ns2neko']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Neko.js b/plugins/NSFW-Neko.js
new file mode 100644
index 00000000..bf817322
--- /dev/null
+++ b/plugins/NSFW-Neko.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Neko Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/neko?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpig);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsneko']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Orgy.js b/plugins/NSFW-Orgy.js
new file mode 100644
index 00000000..38ea14e1
--- /dev/null
+++ b/plugins/NSFW-Orgy.js
@@ -0,0 +1,25 @@
+import fetch from 'node-fetch';
+
+let handler = async (m, { conn }) => {
+ let msg = 'Orgy Image ๐ฅตโ ๏ธ';
+ let endpoint = `https://shizoapi.onrender.com/api/nsfw/orgy?apikey=${shizokeys}`;
+
+ try {
+ const response = await fetch(endpoint);
+ if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m);
+ } else {
+ throw new Error('Failed to fetch the image.');
+ }
+ } catch (error) {
+ console.error('Error:', error);
+ // Handle the error as appropriate for your application
+ }
+};
+
+handler.tags = ['nsfw'];
+handler.help = handler.command = ['orgy'];
+handler.nsfw = true;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/NSFW-Panty.js b/plugins/NSFW-Panty.js
new file mode 100644
index 00000000..54f31f8b
--- /dev/null
+++ b/plugins/NSFW-Panty.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Panty Image ๐ฅต๐`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/panty?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, rpig);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['panty']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Pussy.js b/plugins/NSFW-Pussy.js
new file mode 100644
index 00000000..ffbd3c8b
--- /dev/null
+++ b/plugins/NSFW-Pussy.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Pussy Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/pussy?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'null);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['pussy']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Tantacle.js b/plugins/NSFW-Tantacle.js
new file mode 100644
index 00000000..ec345b53
--- /dev/null
+++ b/plugins/NSFW-Tantacle.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Tantacle Image ๐ฅต๐๐`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/tantacle?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpig);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['tantacle']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-Thigh.js b/plugins/NSFW-Thigh.js
new file mode 100644
index 00000000..dd60ecc3
--- /dev/null
+++ b/plugins/NSFW-Thigh.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `Thighs Image ๐ฆต๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/thigh?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpig);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['nsthigh']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/NSFW-behind.js b/plugins/NSFW-behind.js
new file mode 100644
index 00000000..c81af97a
--- /dev/null
+++ b/plugins/NSFW-behind.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `BackSide Image ๐๐ฅต`
+let endpoint = `https://shizoapi.onrender.com/api/nsfw/behind?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpwp);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['nsfw']
+handler.help = handler.command = ['backside']
+handler.nsfw = true
+export default handler
\ No newline at end of file
diff --git a/plugins/PIES-Indian.js b/plugins/PIES-Indian.js
new file mode 100644
index 00000000..4a170767
--- /dev/null
+++ b/plugins/PIES-Indian.js
@@ -0,0 +1,19 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn }) => {
+
+let msg = `India Hot Girl ๐ฅต๐ฅ`
+let endpoint = `https://shizoapi.onrender.com/api/pies/indian?apikey=${shizokeys}`
+const response = await fetch(endpoint);
+if (response.ok) {
+ const imageBuffer = await response.buffer();
+ await conn.sendFile(m.chat, imageBuffer, 'shizo.techie.error.png', msg, m, null, rpig);
+ } else {
+ throw bug
+ }
+}
+
+handler.tags = ['pies', 'sfw']
+handler.help = handler.command = ['inpie']
+
+export default handler
\ No newline at end of file
diff --git a/plugins/Quran-surah.js b/plugins/Quran-surah.js
index 57c44334..0b0ee735 100644
--- a/plugins/Quran-surah.js
+++ b/plugins/Quran-surah.js
@@ -60,7 +60,7 @@ ${translatedTafsirEnglish.text}`;
};
quranSurahHandler.help = ['quran [surah_number|surah_name]'];
-quranSurahHandler.tags = ['quran', 'surah'];
+quranSurahHandler.tags = ['religion'];
quranSurahHandler.command = ['quran', 'surah']
export default quranSurahHandler;
diff --git a/plugins/STAR-CC.js b/plugins/STAR-CC.js
new file mode 100644
index 00000000..c45a60f5
--- /dev/null
+++ b/plugins/STAR-CC.js
@@ -0,0 +1,28 @@
+import fetch from 'node-fetch';
+
+let handler = async function (m, { conn, text, usedPrefix }) {
+ const apiUrl = `https://lookup.binlist.net/${text}`;
+ fetch(apiUrl).then(response => {
+ if (!response.ok) {
+ return console.log('The page is not working currently');
+ }
+ return response.json();
+ }).then(data => {
+ const formattedResult = `
+๐| BIN: ${text}
+๐ณ| BRAND: ${data.scheme}
+๐ง| TYPE: ${data.type}
+๐| COUNTRY: ${data.country.name}
+๐| FLAG: ${data.country.emoji}
+๐ฆ| BANK: ${data.bank.name}
+
+> *THANKS TO EXCEL (https://github.com/Xcelsama*
+`;
+ m.reply(formattedResult.trim());
+ }).catch(error => {
+ console.error('Error:', error);
+ });
+}
+
+handler.command = /^(bin|card)$/i;
+export default handler;
\ No newline at end of file
diff --git a/plugins/STAR-HOROSCOPE.js b/plugins/STAR-HOROSCOPE.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/STAR-QUIZ.js b/plugins/STAR-QUIZ.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/XLICON-V2-Bing.js b/plugins/XLICON-V2-Bing.js
index e0c99530..80022b24 100644
--- a/plugins/XLICON-V2-Bing.js
+++ b/plugins/XLICON-V2-Bing.js
@@ -13,8 +13,8 @@ let handler = async (message, {
if (!inputText && message.quoted && message.quoted.text) {
inputText = message.quoted.text;
}
- message.reply("Waiting Response from STAR-V2 Bot server...");
- message.react('๐ ');
+ message.reply("Waiting Response from Bot server...");
+ message.react('๐ค');
const encodedText = encodeURIComponent(inputText);
let response = await Bing(encodedText);
if (!response) {
@@ -48,4 +48,4 @@ async function Bing(queryText) {
})
})).json();
return response.choices[0].message.content;
-}
+}
\ No newline at end of file
diff --git a/plugins/_fakeReply.js b/plugins/_fakeReply.js
index 0da39670..e69de29b 100644
--- a/plugins/_fakeReply.js
+++ b/plugins/_fakeReply.js
@@ -1,22 +0,0 @@
-
-import fetch from 'node-fetch'
-
-let handler = m => m
-handler.all = async function (m) {
-
- let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? this.user.jid : m.sender
- let pp = await this.profilePictureUrl(who, 'image').catch(_ => 'https://i.imgur.com/whjlJSf.jpg')
-
- //reply link wa
- global.rpl = { contextInfo: { externalAdReply: { mediaUrl: dygp, mediaType: 'VIDEO', description: 'support group', title: packname, body: 'support group', thumbnailUrl: pp, sourceUrl: dygp }}}
-
- //reply link PayPal
- global.rpyp = { contextInfo: { externalAdReply: { mediaUrl: dygp, mediaType: 'VIDEO', description: 'Donate', title: 'YOUTUBE', body: 'Keep bot alive', thumbnailUrl: pp, sourceUrl: fgyt }}}
-
- //reply link yt
- global.rpyt = { contextInfo: { externalAdReply: { showAdAttribution: true, mediaUrl: fgyt, mediaType: 'VIDEO', description: 'Suscribete : ' + fgyt, title: 'YouTube', body: 'learn to create your own bots', thumbnailUrl: pp, sourceUrl: fgyt }}}
-
- global.fcon = { key: { fromMe: false, participant: `0@s.whatsapp.net`, remoteJid: 'status@broadcast' }, message: { contactMessage: { displayName: `GURU-BOT`, vcard: `BEGIN:VCARD\nVERSION:3.0\nN:;a,;;;\nFN:'GURU-BOT'\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`}}}
-
-}
-export default handler
diff --git a/plugins/_mention.js b/plugins/_mention.js
index 4e433178..e69de29b 100644
--- a/plugins/_mention.js
+++ b/plugins/_mention.js
@@ -1,51 +0,0 @@
-//Guru ka Maal Hai
-//Made For Guru Bot
-//created on Diwali(12th Nov)
-//copy with credits
-//lodusheks stay away
-
-
-
-let handler = m => m
-handler.all = async function (m, conn) {
- var vn = "./Assets/ALIVE.mp3"
- let url = "https://github.com/salmanytofficial"
- let murl = "https://www.instagram.com/ahmmikun/"
- let hash = global.botname
- let img = "https://telegra.ph/file/f2fa9732e0e26bbb0bfb0.jpg"
- let num = ["2347045035241"]
-
- let doc = {
- audio: {
- url: vn
- },
- mimetype: 'audio/mpeg',
- ptt: true,
- waveform: [0,99,0,99,0,99,0],
- fileName: "Guru",
-
- contextInfo: {
- mentionedJid: [m.sender],
- externalAdReply: {
- title: "โบ |โ II โท| โก",
- body: ๐๐๐ฐ๐-๐ผ๐ณ-๐๐ธ,
- thumbnailUrl: img,
- sourceUrl: url,
- mediaType: 2,
- mediaUrl: murl,
- // renderLargerThumbnail: true,
- showAdAttribution: true
- }}
- };
-
- let phoneNumber = '';
- if (m.mentionedJid && m.mentionedJid[0]) {
- phoneNumber = m.mentionedJid[0].replace(/[^0-9]/g, '');
- if (num.includes(phoneNumber)) {
- return this.sendMessage(m.chat, doc, { quoted: m });
- }
- } else {
- return
- }
-}
-export default handler
diff --git a/plugins/_similarity.js b/plugins/_similarity.js
index ac24404a..fc872a57 100644
--- a/plugins/_similarity.js
+++ b/plugins/_similarity.js
@@ -1,26 +1,20 @@
-
-import didyoumean from 'didyoumean'
-
+/*import didyoumean from 'didyoumean'
import similarity from 'similarity'
-//import { plugins } from '../lib/plugins.js'
-
-export async function before(m, { conn, match, usedPrefix, command }) {
-
- if ((usedPrefix = (match[0] || '')[0])) {
- let noPrefix = m.text.replace(usedPrefix, '')
- let args = noPrefix.trim().split` `.slice(1)
- let text = args.join` `
- let help = Object.values(plugins).filter(v => v.help && !v.disabled).map(v => v.help).flat(1)
- if (help.includes(noPrefix)) return
- let mean = didyoumean(noPrefix, help)
- let sim = similarity(noPrefix, mean)
- let som = sim * 100
- let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
- let name = await conn.getName(who)
-
- let caption = `Hey ${name} senpai are you trying to use *${usedPrefix + mean} ?*`
- if (mean) this.reply(m.chat, `${caption}`, m)
- }
+export async function before(m, { match, usedPrefix, command }) {
+ if ((usedPrefix = (match[0] || '')[0])) {
+ let noPrefix = m.text.replace(usedPrefix, '')
+ let args = noPrefix.trim().split` `.slice(1)
+ let text = args.join` `
+ let help = Object.values(plugins).filter(v => v.help && !v.disabled).map(v => v.help).flat(1)
+ if (help.includes(noPrefix)) return
+ let mean = didyoumean(noPrefix, help)
+ let sim = similarity(noPrefix, mean)
+ let som = sim * 100
+ let who = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
+ let name = await conn.getName(who)
+ let caption = `๐ Hi sis ${name} @${who.split("@")[0]}, maybe what you mean: *${usedPrefix + mean}*\nMatch Rate: *${parseInt(som)}%*`
+ if (mean) this.sendButton(m.chat, caption, wm, null, [['โ
Yes', `${usedPrefix + mean} ${text}`], ['โ No', usedPrefix + '?']], m, { mentions: this.parseMention(caption) })
+ }
}
export const disabled = false
-
+*/
\ No newline at end of file
diff --git a/plugins/aa.js b/plugins/aa.js
new file mode 100644
index 00000000..c464825d
--- /dev/null
+++ b/plugins/aa.js
@@ -0,0 +1,61 @@
+import { sticker } from '../lib/sticker.js'
+import * as WSF from 'wa-sticker-formatter'
+let handler = m => m
+
+handler.before = async function (m) {
+ let chat = global.db.data.chats[m.chat]
+ let user = global.db.data.users[m.sender]
+ if (chat.stiker && !user.banned && !chat.isBanned && !m.fromMe && !m.isBaileys) {
+ // try {
+ let q = m
+ let stiker = false
+ let wsf = false
+ let mime = (q.msg || q).mimetype || ''
+ if (/webp/.test(mime)) return
+ if (/image/.test(mime)) {
+ let img = await q.download()
+ if (!img) return
+ wsf = new WSF.Sticker(img, {
+ pack: packname,
+ author: author,
+ crop: false,
+ })
+ } else if (/video/.test(mime)) {
+ if ((q.msg || q).seconds > 11) return m.reply('Maximum 10 seconds!')
+ let img = await q.download()
+ if (!img) return
+ wsf = new WSF.Sticker(img, {
+ pack: packname,
+ author: author,
+ crop: false,
+ })
+ } else if (m.text.split` `[0]) {
+ if (isUrl(m.text.split` `[0])) stiker = await sticker(false, m.text.split` `[0], packname, author)
+ else return
+ }
+ if (wsf) {
+ await wsf.build()
+ const sticBuffer = await wsf.get()
+ if (sticBuffer) await this.sendMessage(m.chat, { sticker: sticBuffer }, {
+ quoted: m,
+ mimetype: 'image/webp',
+ ephemeralExpiration: 86400
+ })
+ }
+ if (stiker) await this.sendMessage(m.chat, { sticker: stiker }, {
+ quoted: m,
+ mimetype: 'image/webp',
+ ephemeralExpiration: 86400
+ })
+ // } finally {
+ // if (stiker) {
+ // }
+ // }
+ }
+ return true
+}
+export default handler
+
+const isUrl = (text) => {
+ return text.match(new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)(jpe?g|gif|png)/, 'gi'))
+}
\ No newline at end of file
diff --git a/plugins/ab-leave.js b/plugins/ab-leave.js
index a41a51b7..7616f04e 100644
--- a/plugins/ab-leave.js
+++ b/plugins/ab-leave.js
@@ -1,6 +1,6 @@
let handler = async (m, { conn, args, command }) => {
let group = m.chat
- await m.reply('Byee Guys bot will leave now , , ! (โงฯโฆ๐)ใ', m.chat)
+ await m.reply('Byee Guys bot will exit now , , (ยดเผเบถ อส เผเบถ `)โก', m.chat)
await conn.groupLeave(group)
}
handler.help = ['leavegc', 'out']
diff --git a/plugins/alldl.js b/plugins/alldl.js
new file mode 100644
index 00000000..f27445fa
--- /dev/null
+++ b/plugins/alldl.js
@@ -0,0 +1,54 @@
+// Update by Xnuvers007
+
+// DAFTAR APIKEY DISINI (https://wa.me/+4916258065801?text=Om+buatin+key+untuk+api+https://xzn.wtf)
+// INI ADALAH FILE UNTUK MENDOWNLOAD Yt, Tt, Twite, Ig, FB
+
+import axios from 'axios';
+import fs from 'fs';
+
+const handler = async (m, { conn, args, command }) => {
+ if (!args[0]) throw 'Where\'s the URL?';
+ const userUrl = args[0];
+
+ const apiUrl = `https://xzn.wtf/api/download?url=${encodeURIComponent(userUrl)}&apikey=APIKEYPUNYAMU`;
+
+ try {
+ const response = await axios.get(apiUrl);
+ const videoUrl = response.data.url[0].url;
+
+ await m.reply(`Downloading video from ${videoUrl}`);
+
+ const videoResponse = await axios({
+ method: 'GET',
+ url: videoUrl,
+ responseType: 'stream',
+ });
+
+ const videoName = `video-${Date.now()}.mp4`;
+ const videoPath = `./${videoName}`;
+
+ const writer = fs.createWriteStream(videoPath);
+ videoResponse.data.pipe(writer);
+
+ writer.on('finish', async () => {
+ await conn.sendFile(m.chat, fs.readFileSync(videoPath), videoName, '', m);
+
+ fs.unlinkSync(videoPath);
+
+ m.reply('Video successfully downloaded and sent!');
+ });
+
+ writer.on('error', (err) => {
+ m.reply(`Error occurred while downloading the video: ${err.message}`);
+ });
+ } catch (error) {
+ m.reply(`Error occurred: ${error.message}`);
+ }
+};
+
+handler.help = ['all'].map((v) => v + ' ');
+handler.tags = ['new'];
+// handler.command = /^(fb(dl)?|facebook)$/i;
+handler.command = /^(all|semua)$/i;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/anime-amv.js b/plugins/anime-amv.js
index 6b763249..e69de29b 100644
--- a/plugins/anime-amv.js
+++ b/plugins/anime-amv.js
@@ -1 +0,0 @@
-function _0x1e4a(){const _0x2dd33c=['https://shortstatusvideos.com/anime-video-status-download/','Enter\x20your\x20number\x0aExample:\x20.amv\x201','27GOWPMJ','push','source','a.mb-button.mb-style-glass.mb-size-tiny.mb-corners-pill.mb-text-style-heavy','strong','anime','tags','amv','7hOTfAe','limit','href','10AlnNzl','load','4048mQQwVe','https://mobstatus.com/anime-whatsapp-status-video/','floor','random','help','text','sendFile','attr','length','a.mks_button.mks_button_small.squared','1295088ffXbvD','1089552XezhQX','172bXTyQt','closest','chat','reply','1611078qViqBO','2929938rKHuTK','2357665PjRoZf','each','Script\x20video\x20made\x20by\x20XLICON\x20','5915228OhwxpN','prevAll'];_0x1e4a=function(){return _0x2dd33c;};return _0x1e4a();}const _0x223a9e=_0x2624;(function(_0x3b3b0b,_0xb247e6){const _0x560e70=_0x2624,_0x55e8b8=_0x3b3b0b();while(!![]){try{const _0x31ddf3=-parseInt(_0x560e70(0x195))/0x1*(-parseInt(_0x560e70(0x189))/0x2)+-parseInt(_0x560e70(0x199))/0x3+-parseInt(_0x560e70(0x193))/0x4+-parseInt(_0x560e70(0x19b))/0x5+parseInt(_0x560e70(0x19a))/0x6*(parseInt(_0x560e70(0x184))/0x7)+parseInt(_0x560e70(0x194))/0x8*(parseInt(_0x560e70(0x17c))/0x9)+-parseInt(_0x560e70(0x187))/0xa*(-parseInt(_0x560e70(0x178))/0xb);if(_0x31ddf3===_0xb247e6)break;else _0x55e8b8['push'](_0x55e8b8['shift']());}catch(_0x19667e){_0x55e8b8['push'](_0x55e8b8['shift']());}}}(_0x1e4a,0x6df92));import _0x42099f from'cheerio';import _0x4e1310 from'node-fetch';let handler=async(_0x56e0e1,{conn:_0x3ebd67,args:_0xd33e93,usedPrefix:_0xd4676e,text:_0x1b2311,command:_0x6f0b23})=>{const _0x3e8027=_0x2624;await _0x56e0e1['reply'](wait);if(!_0x1b2311)return _0x56e0e1['reply'](_0x3e8027(0x17b));if(_0x1b2311=='1')try{let _0x2127c5=await animeVideo(),_0x117ab4='here\x20is\x20your\x20video';await _0x3ebd67[_0x3e8027(0x18f)](_0x56e0e1['chat'],_0x2127c5[_0x3e8027(0x17e)],'',_0x117ab4,_0x56e0e1);}catch(_0xc929b8){await _0x56e0e1[_0x3e8027(0x198)](eror);}if(_0x1b2311=='2')try{let _0x185d49=await animeVideo2(),_0x48345c=_0x3e8027(0x19d);await _0x3ebd67['sendFile'](_0x56e0e1[_0x3e8027(0x197)],_0x185d49[_0x3e8027(0x17e)],'',_0x48345c,_0x56e0e1);}catch(_0x5319f1){await _0x56e0e1[_0x3e8027(0x198)](eror);}};function _0x2624(_0x4b3217,_0x54e11f){const _0x1e4a22=_0x1e4a();return _0x2624=function(_0x2624c9,_0x183a04){_0x2624c9=_0x2624c9-0x178;let _0x143131=_0x1e4a22[_0x2624c9];return _0x143131;},_0x2624(_0x4b3217,_0x54e11f);}handler[_0x223a9e(0x18d)]=[_0x223a9e(0x183)],handler[_0x223a9e(0x182)]=[_0x223a9e(0x181)],handler['command']=/^(amv)$/i,handler[_0x223a9e(0x185)]=!![];export default handler;async function animeVideo(){const _0x1a7756=_0x223a9e,_0x1324d8=_0x1a7756(0x17a),_0x3422f4=await _0x4e1310(_0x1324d8),_0x27c62a=await _0x3422f4[_0x1a7756(0x18e)](),_0xed3619=_0x42099f[_0x1a7756(0x188)](_0x27c62a),_0x4881ec=[];_0xed3619(_0x1a7756(0x192))[_0x1a7756(0x19c)]((_0x483efc,_0xf8ed81)=>{const _0x188417=_0x1a7756,_0xc09fff=_0xed3619(_0xf8ed81)[_0x188417(0x190)](_0x188417(0x186)),_0x2e7389=_0xed3619(_0xf8ed81)[_0x188417(0x196)]('p')[_0x188417(0x179)]('p')['find'](_0x188417(0x180))[_0x188417(0x18e)]();_0x4881ec[_0x188417(0x17d)]({'title':_0x2e7389,'source':_0xc09fff});});const _0x97f0aa=Math[_0x1a7756(0x18b)](Math[_0x1a7756(0x18c)]()*_0x4881ec[_0x1a7756(0x191)]),_0xe2ebc1=_0x4881ec[_0x97f0aa];return _0xe2ebc1;}async function animeVideo2(){const _0x477df1=_0x223a9e,_0x230e33=_0x477df1(0x18a),_0x4eb15b=await _0x4e1310(_0x230e33),_0x314fc3=await _0x4eb15b[_0x477df1(0x18e)](),_0x199664=_0x42099f[_0x477df1(0x188)](_0x314fc3),_0x12abe1=[],_0x48d709=_0x199664('strong')[_0x477df1(0x18e)]();_0x199664(_0x477df1(0x17f))['each']((_0x4d7b6c,_0x24ef8f)=>{const _0x4d576d=_0x477df1,_0x525ab1=_0x199664(_0x24ef8f)['attr'](_0x4d576d(0x186));_0x12abe1['push']({'title':_0x48d709,'source':_0x525ab1});});const _0x4d7afe=Math['floor'](Math['random']()*_0x12abe1[_0x477df1(0x191)]),_0x28b577=_0x12abe1[_0x4d7afe];return _0x28b577;}
diff --git a/plugins/anime-info.js b/plugins/anime-info.js
new file mode 100644
index 00000000..4d09bea6
--- /dev/null
+++ b/plugins/anime-info.js
@@ -0,0 +1,50 @@
+// update By Xnuvers007
+
+import fetch from 'node-fetch'
+
+var handler = async (m, { conn, text }) => {
+if (!text) throw `*_Enter the Anime Title You Want to Find!_*`
+conn.reply(m.chat, 'Looking for anime... Please wait', m)
+let res = await fetch('https://api.jikan.moe/v4/anime?q=' + text)
+if (!res.ok) throw 'Not Found'
+let json = await res.json()
+let { episodes, url, type, score, rating, scored_by, popularity, rank, season, year, members, background, status, duration, synopsis, favorites } = json.data[0]
+// let studio = json.data[0].authors[0].name
+// let studiomynimelist = json.data[0].authors[0].url
+let producers = json.data[0].producers.map(prod => `${prod.name} (${prod.url})`).join('\n');
+let studio = json.data[0].studios.map(stud => `${stud.name} (${stud.url})`).join('\n');
+let genre = json.data[0].genres.map(xnuvers007 => `${xnuvers007.name}`).join('\n');
+let judul = json.data[0].titles.map(jud => `${jud.title} [${jud.type}]`).join('\n');
+let trailerUrl = json.data[0].trailer.url;
+
+let animeingfo = `๐บ แดษชแดสแด: ${judul}
+๐บ Trailer: ${trailerUrl}
+๐ฌ แดแดษชsแดแด
แดs: ${episodes}
+โ๏ธ แดสแดษดsแดษชsษช: ${type}
+๐บ Genre: ${genre}
+๐ sแดแดแดแดs: ${status}
+โ แด
แดสแดแดษชแดษด: ${duration}
+๐ าแดแด แดสษชแดแด: ${favorites}
+๐งฎ sแดแดสแด: ${score}
+๐ RATING: ${rating}
+๐ SCORED BY: ${scored_by}
+๐ฅ POPULARITY: ${popularity}
+โญ RANK: ${rank}
+โจ SEASON / MUSIM: ${season}
+๐ YEAR / TAHUN (RILIS): ${year}
+๐ค PRODUSER: ${producers}
+๐ค STUDIO: ${studio}
+๐ฅ แดแดแดสแดสs: ${members}
+โ๏ธ แดสส: ${url}
+๐ สแดแดแดษขสแดแดษดแด
: ${background}
+๐ฌ sษชษดแดแดsษชs: ${synopsis}
+`
+conn.sendFile(m.chat, json.data[0].images.jpg.image_url, 'animek.jpg', `*${htki} ANIME INFO ${htka}*\n` + animeingfo, m)
+
+ conn.reply(m.chat, 'DON\'T FORGET THE DEVELOPER SUPPORT\nXcelsama\nhttps://github.com/Xcelsama', m)
+}
+handler.help = ['animeinfo ', 'anime ', 'infoanime ', 'nimeinfo ', 'nime ']
+handler.tags = ['anime']
+handler.command = /^(animeinfo|anime|infoanime|nimeinfo|nime)$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/animeinfo.js b/plugins/animeinfo.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/animex.js b/plugins/animex.js
new file mode 100644
index 00000000..a53f7f53
--- /dev/null
+++ b/plugins/animex.js
@@ -0,0 +1,34 @@
+import { otakudesu } from 'hxz-api'
+import fetch from 'node-fetch'
+let handler = async (m, { conn, text, args, usedPrefix, command }) => {
+ //let teks = text ? text : m.quoted && m.quoted.text ? m.quoted.text : ''
+ if (!text) throw `Use example ${usedPrefix}${command} Anime`
+ let result = await otakudesu(text)
+ let datathumb = await(await fetch(result.img)).buffer()
+ let otaku = `
+๐ *TITLE:* ${result.judul}
+๐ *JAPAN:* ${result.jepang}
+โญ *RATE:* ${result.rate}
+๐ *PRODUCER:* ${result.produser}
+๐ *TIPE:* ${result.tipe}
+๐ *STATUS:* ${result.status}
+๐ *EPISODE:* ${result.episode}
+๐ชง *DURATION:* ${result.durasi}
+๐ *RELEASE:* ${result.rilis}
+๐ *STUDIO:* ${result.studio}
+๐ *GENRE:* ${result.genre}
+๐ *DESC:* ${result.desc}
+๐ *BATCH:* ${result.batch}
+
+๐งท *BATCHSD:* ${result.batchSD}
+
+๐ *BATCHHD:* ${result.batchHD}
+`
+await conn.sendButtonImg(m.chat, datathumb, otaku, wm, 'menu', '.menu', m)
+}
+
+handler.help = ['otakudesu'].map(v => v + ' ')
+handler.tags = ['new']
+handler.command = /^(otakudesu)$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/anti.js b/plugins/anti.js
new file mode 100644
index 00000000..ae32bcf7
--- /dev/null
+++ b/plugins/anti.js
@@ -0,0 +1,19 @@
+let handler = async (m, { conn, usedPrefix, command }) => {
+ if (!m.isGroup) return m.reply("This command can only be used in groups.");
+ if (!isBotAdmin) return m.reply("I need to be an admin to perform this action.");
+ let chat = global.db.data.chats[m.chat];
+ if (m.isGroup && m.participant.isAdmin && m.mentionedJidList.includes(m.participant) && !m.participant.isOwner) {
+ await conn.groupDemoteAdmin(m.chat, m.participant);
+ m.reply(You can't demote an admin! You have been demoted instead.);
+ // Delete the message that attempted to demote an admin @by ABRAHAM DWAMENA
+ conn.sendMessage(m.chat, { delete: m.message.key });
+ }
+};
+
+handler.help = ['antiadmin']
+handler.tags = ['group']
+handler.command = /^(antiadmin)$/i
+handler.admin = true
+handler.botAdmin = true
+
+export default handler
\ No newline at end of file
diff --git a/plugins/antilinx.js b/plugins/antilinx.js
new file mode 100644
index 00000000..b976faab
--- /dev/null
+++ b/plugins/antilinx.js
@@ -0,0 +1,28 @@
+let linkRegex = /https:/i
+export async function before(m, { isAdmin, isBotAdmin, text }) {
+if (m.isBaileys && m.fromMe)
+return !0
+if (!m.isGroup) return !1
+let chat = global.db.data.chats[m.chat]
+let delet = m.key.participant
+let bang = m.key.id
+let bot = global.db.data.settings[this.user.jid] || {}
+const isGroupLink = linkRegex.exec(m.text)
+if (chat.antiLink2 && isGroupLink && !isAdmin) {
+if (isBotAdmin) {
+const linkThisGroup = `https://chat.whatsapp.com/${await this.groupInviteCode(m.chat)}`
+const linkThisGroup2 = `https://www.youtube.com/`
+const linkThisGroup3 = `https://youtu.be/`
+if (m.text.includes(linkThisGroup)) return !0
+if (m.text.includes(linkThisGroup2)) return !0
+if (m.text.includes(linkThisGroup3)) return !0
+}
+await m.reply(`*ใ ANTI LINKS ใ*\n\n*Hasta la vista baby ๐, ${await this.getName(m.sender)} you broke the group rules you will be removed...!!*`)
+if (isBotAdmin && bot.restrict) {
+ await conn.sendMessage(m.chat, { delete: { remoteJid: m.chat, fromMe: false, id: bang, participant: delet }})
+ let responseb = await conn.groupParticipantsUpdate(m.chat, [m.sender], 'remove')
+ if (responseb[0].status === "404") return
+ } else if (!bot.restrict) return m.reply('*the owner of the bot have activated the restriction,Use command (disable restrict) or contact him to disable them*')
+ }
+return !0
+}
\ No newline at end of file
diff --git a/plugins/antiviewonce.js b/plugins/antiviewonce.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/autobio.js b/plugins/autobio.js
new file mode 100644
index 00000000..3b18a56b
--- /dev/null
+++ b/plugins/autobio.js
@@ -0,0 +1,17 @@
+export async function before(m) {
+ let setting = global.db.data.settings[this.user.jid]
+ if (new Date() * 1 - setting.status > 1000) {
+ let _uptime = process.uptime() * 1000
+ let uptime = clockString(_uptime);
+ let bio = `Hey I'm Using Star-bot ๐คฉ`
+ await this.updateProfileStatus(bio).catch(_ => _)
+ setting.status = new Date() * 1
+ }
+}
+function clockString(ms) {
+ let d = isNaN(ms) ? '--' : Math.floor(ms / 86400000)
+ let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000) % 24
+ let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60
+ return [d, ' *Days โ๏ธ*\n ', h, ' *Hours ๐*\n ', m, ' *Minute โฐ*\n ', s, ' *Second โฑ๏ธ* '].map(v => v.toString().padStart(2, 0)).join('')
+}
\ No newline at end of file
diff --git a/plugins/autostk.js b/plugins/autostk.js
new file mode 100644
index 00000000..c464825d
--- /dev/null
+++ b/plugins/autostk.js
@@ -0,0 +1,61 @@
+import { sticker } from '../lib/sticker.js'
+import * as WSF from 'wa-sticker-formatter'
+let handler = m => m
+
+handler.before = async function (m) {
+ let chat = global.db.data.chats[m.chat]
+ let user = global.db.data.users[m.sender]
+ if (chat.stiker && !user.banned && !chat.isBanned && !m.fromMe && !m.isBaileys) {
+ // try {
+ let q = m
+ let stiker = false
+ let wsf = false
+ let mime = (q.msg || q).mimetype || ''
+ if (/webp/.test(mime)) return
+ if (/image/.test(mime)) {
+ let img = await q.download()
+ if (!img) return
+ wsf = new WSF.Sticker(img, {
+ pack: packname,
+ author: author,
+ crop: false,
+ })
+ } else if (/video/.test(mime)) {
+ if ((q.msg || q).seconds > 11) return m.reply('Maximum 10 seconds!')
+ let img = await q.download()
+ if (!img) return
+ wsf = new WSF.Sticker(img, {
+ pack: packname,
+ author: author,
+ crop: false,
+ })
+ } else if (m.text.split` `[0]) {
+ if (isUrl(m.text.split` `[0])) stiker = await sticker(false, m.text.split` `[0], packname, author)
+ else return
+ }
+ if (wsf) {
+ await wsf.build()
+ const sticBuffer = await wsf.get()
+ if (sticBuffer) await this.sendMessage(m.chat, { sticker: sticBuffer }, {
+ quoted: m,
+ mimetype: 'image/webp',
+ ephemeralExpiration: 86400
+ })
+ }
+ if (stiker) await this.sendMessage(m.chat, { sticker: stiker }, {
+ quoted: m,
+ mimetype: 'image/webp',
+ ephemeralExpiration: 86400
+ })
+ // } finally {
+ // if (stiker) {
+ // }
+ // }
+ }
+ return true
+}
+export default handler
+
+const isUrl = (text) => {
+ return text.match(new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)(jpe?g|gif|png)/, 'gi'))
+}
\ No newline at end of file
diff --git a/plugins/bardai.js b/plugins/bardai.js
new file mode 100644
index 00000000..1888cda1
--- /dev/null
+++ b/plugins/bardai.js
@@ -0,0 +1,61 @@
+import uploadImage from '../lib/uploadImage.js';
+import BardAI from '../lib/bard.js';
+
+const bardAi = new BardAI();
+
+let handler = async (message, {
+ conn: connection,
+ args: arguments,
+ usedPrefix: prefix,
+ command: cmd
+}) => {
+ let inputText;
+ if (arguments.length >= 1) {
+ inputText = arguments.slice(0).join(" ");
+ } else {
+ if (message.quoted && message.quoted.text) {
+ inputText = message.quoted.text;
+ } else {
+ return message.reply("Give some text");
+ }
+ }
+ let quotedMessage = message.quoted ? message.quoted : message;
+ let mimeType = (quotedMessage.msg || quotedMessage).mimetype || '';
+ await message.react('๐ฌ');
+ if (!mimeType) {
+ try {
+ let response = await Bard(inputText);
+ await message.reply(response.content);
+ } catch (error) {
+ throw "An error occured";
+ }
+ } else {
+ let downloadedImage = await quotedMessage.download();
+ let isImage = /image\/(png|jpe?g)/.test(mimeType);
+ if (isImage) {
+ let uploadedImage = await uploadImage(downloadedImage);
+ let responseWithImage = await BardImg(inputText, uploadedImage);
+ await message.reply(responseWithImage.content);
+ } else {
+ await message.reply("Only images are supported");
+ }
+ }
+};
+
+handler.help = ["bard"];
+handler.tags = ['ai'];
+handler.command = /^(bard)$/i;
+export default handler;
+
+async function Bard(question) {
+ return await bardAi.question({
+ 'ask': question
+ });
+};
+
+async function BardImg(question, image) {
+ return await bardAi.questionWithImage({
+ 'ask': question,
+ 'image': image
+ });
+};
\ No newline at end of file
diff --git a/plugins/blackbox-ai.js b/plugins/blackbox-ai.js
index db9782b2..5dbb6aeb 100644
--- a/plugins/blackbox-ai.js
+++ b/plugins/blackbox-ai.js
@@ -1,6 +1,6 @@
import axios from 'axios';
-const endpoint = 'https://mzn-bbox.onrender.com/bb?ask=';
+const endpoint = 'https://api.maher-zubair.tech/ai/blackbox?q';
let handler = async (m, { text, conn, usedPrefix, command }) => {
try {
diff --git a/plugins/bot.js b/plugins/bot.js
index f85b55b6..d127070e 100644
--- a/plugins/bot.js
+++ b/plugins/bot.js
@@ -3,13 +3,13 @@ let handler = async (m, { conn}) => {
let user = global.db.data.users[m.sender]
let name = conn.getName(m.sender)
let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
-let av = `./Assets/mp3/${pickRandom(["Xlicon", "Xlicon1", "Xlicon2", "Xlicon3", "Xlicon4"])}.mp3`
+let av = `./Assets/mp3/${pickRandom(["STAR", "STAR1", "STAR2", "STAR3", "STAR4"])}.mp3`
-m.reply( `Hello ${taguser} Am STAR-MD-V2 creatd by Excel Need help? type /help `)
+m.reply( `Hello ${taguser} Am STAR-MD-V2 created by Excel Do Need help? type ${used prefix}Help`)
conn.sendFile(m.chat, av, 'audio.mp3', null, m, true, { type: 'audioMessage', ptt: true })
}
-handler.customPrefix = /^(Xcel|Excel)$/i
+handler.customPrefix = /^(Star|Excel)$/i
handler.command = new RegExp
export default handler
diff --git a/plugins/button.js b/plugins/button.js
new file mode 100644
index 00000000..91dcd46c
--- /dev/null
+++ b/plugins/button.js
@@ -0,0 +1,55 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { text, conn, usedPrefix, command }) => {
+ if (!text && !(m.quoted && m.quoted.text)) {
+ throw `Please provide some text or quote a message to get a response.`
+ }
+
+ if (!text && m.quoted && m.quoted.text) {
+ text = m.quoted.text
+ }
+
+ try {
+ m.react(rwait)
+
+ conn.sendPresenceUpdate('composing', m.chat)
+ const prompt = encodeURIComponent(text)
+
+ const guru1 = `https://api.gurusensei.workers.dev/llama?prompt=${prompt}`
+
+ try {
+ let response = await fetch(guru1)
+ let data = await response.json()
+ let result = data.response.response
+
+ if (!result) {
+ throw new Error('No valid JSON response from the first API')
+ }
+
+ await conn.sendButton(m.chat,result, author, 'https://telegra.ph/file/f6908fee9f896b7cb6e63.jpg', [['Script', `${usedPrefix}script`]], null, [['Fork Repo', `https://github.com/Xcelsama/STAR-MD-V2/fork`]], m)
+ m.react(done)
+ } catch (error) {
+ console.error('Error from the first API:', error)
+
+ //const model = 'llama'
+ // const senderNumber = m.sender.replace(/[^0-9]/g, '')
+ //const session = `star_bot_${senderNumber}`
+ const guru2 = `https://ultimetron.guruapi.tech/gpt3?prompt=${prompt}`
+
+ let response = await fetch(guru2)
+ let data = await response.json()
+ let result = data.completion
+
+ await conn.sendButton(m.chat,result, author, 'https://telegra.ph/file/f6908fee9f896b7cb6e63.jpg', [['Script', `.sc`]], null, [['Fork Repo', `https://github.com/Xcelsama/STAR-MD-V2/fork`]], m)
+ m.react(done)
+ }
+ } catch (error) {
+ console.error('Error:', error)
+ throw `*ERROR*`
+ }
+}
+handler.help = ['starai']
+handler.tags = ['AI']
+handler.command = ['starai', 'hello', 'ai', 'stargpt']
+
+export default handler
\ No newline at end of file
diff --git a/plugins/buych.js b/plugins/buych.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/channel.js b/plugins/channel.js
index 7d368000..f686c114 100644
--- a/plugins/channel.js
+++ b/plugins/channel.js
@@ -1,10 +1,11 @@
let handler = async m => m.reply(`
-โญโญโญโญโ
โช *๐๐๐ฐ๐* โชโ
โญโญโญ
-โ ๐ *BOT Name:* _๐๐๐ฐ๐-๐ผ๐ณ-๐
๐ธ_
-โ ๐ *Description:* _I'm STAR-MD-V2. A MultiDevice WhatsApp bot with rich features Created BY +2347045035241._
+โญโญโญโญโ
โชโขโขโข*ีอฒแชแก*โขโขโขโชโ
โญโญโญ
+โ ๐ *BOT Name:* _ีอฒแชแก-แทแ -แ2_
+โ ๐ *Description:* _I'm STAR-MD-V2. A
+โMultiDevice WhatsApp bot with rich features โCreated BY +2347045035241._
โ ๐ค *Owner:* _ไนไนๅไนใฅ_
-โ ๐ *Channel:* https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
+โ ๐ *Channel:* https://whatsapp.com/channel/0029VaBcXo4JJhzW9c1uVD2X
โฐโโโโโโโโโโโโโโโโโฏ
`.trim())
handler.help = ['channel']
diff --git a/plugins/db.js b/plugins/db.js
new file mode 100644
index 00000000..735d0bd5
--- /dev/null
+++ b/plugins/db.js
@@ -0,0 +1,9 @@
+let handler = async (m) => {
+ let totalreg = Object.keys(global.db.data.users).length
+ let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length
+ m.reply(`*${totalreg} users using Bot*`)
+}
+handler.help = ['database', 'user']
+handler.tags = ['main']
+handler.command = /^(database|db|user)$/i
+export default handler
\ No newline at end of file
diff --git a/plugins/dl-modapk.js b/plugins/dl-modapk.js
index a3bbb743..704e5feb 100644
--- a/plugins/dl-modapk.js
+++ b/plugins/dl-modapk.js
@@ -2,8 +2,8 @@ import { download } from 'aptoide-scraper';
let handler = async (m, { conn, usedPrefix: prefix, command, text }) => {
try {
- if (command === 'modapk') {
- if (!text) throw `*[โ] Please provide the APK Name you want to download.*`;
+ if (command === 'apk') {
+ if (!text) throw `*[โ] Please provide the APP Name you want to download.*`;
await conn.reply(m.chat, global.wait, m);
let data = await download(text);
@@ -27,7 +27,7 @@ let handler = async (m, { conn, usedPrefix: prefix, command, text }) => {
}
};
-handler.help = ['modapk']
+handler.help = ['apk']
handler.tags = ['downloader']
-handler.command = /^modapk$/i;
+handler.command = /^apk$/i;
export default handler;
diff --git a/plugins/dl-play3.js b/plugins/dl-play3.js
deleted file mode 100644
index 2ddeaf24..00000000
--- a/plugins/dl-play3.js
+++ /dev/null
@@ -1,167 +0,0 @@
-import fetch from "node-fetch";
-import ytdl from 'youtubedl-core';
-import yts from 'youtube-yts';
-import fs from 'fs';
-import { pipeline } from 'stream';
-import { promisify } from 'util';
-import os from 'os';
-
-const streamPipeline = promisify(pipeline);
-
-const handler = async (m, {
- conn,
- command,
- text,
- args,
- usedPrefix
-}) => {
- if (!text) throw `give a text to search Example: *${usedPrefix + command}* Jesus Christ song`;
- conn.GURUPLAY = conn.GURUPLAY ? conn.GURUPLAY : {};
- await conn.reply(m.chat, wait, m);
- const result = await searchAndDownloadMusic(text);
- const infoText = `๐ฐโโใ *ีอฒแชแก-แทแ -แ2 PLAYแฌR* ใโโ ๐ฐ`;
-
-const orderedLinks = result.allLinks.map((link, index) => {
- const sectionNumber = index + 1;
- const {
- title,
- url
- } = link;
- return `*${sectionNumber}.* ${title}`;
-});
-
- const orderedLinksText = orderedLinks.join("\n\n");
- const fullText = `${infoText}\n\n${orderedLinksText}`;
- const {
- key
- } = await conn.reply(m.chat, fullText, m);
- conn.GURUPLAY[m.sender] = {
- result,
- key,
- timeout: setTimeout(() => {
- conn.sendMessage(m.chat, {
- delete: key
- });
- delete conn.GURUPLAY[m.sender];
- }, 60 * 1000),
- };
-};
-
-handler.before = async (m, {
- conn
-}) => {
- conn.GURUPLAY = conn.GURUPLAY ? conn.GURUPLAY : {};
- if (m.isBaileys || !(m.sender in conn.GURUPLAY)) return;
- const {
- result,
- key,
- timeout
- } = conn.GURUPLAY[m.sender];
- if (!m.quoted || m.quoted.id !== key.id || !m.text) return;
- const choice = m.text.trim();
- const inputNumber = Number(choice);
- if (inputNumber >= 1 && inputNumber <= result.allLinks.length) {
- const selectedUrl = result.allLinks[inputNumber - 1].url;
- console.log("selectedUrl", selectedUrl)
- let title = generateRandomName();
- const audioStream = ytdl(selectedUrl, {
- filter: 'audioonly',
- quality: 'highestaudio',
- });
-
-
-
- const tmpDir = os.tmpdir();
-
-
- const writableStream = fs.createWriteStream(`${tmpDir}/${title}.mp3`);
-
-
- await streamPipeline(audioStream, writableStream);
-
- const doc = {
- audio: {
- url: `${tmpDir}/${title}.mp3`
- },
- mimetype: 'audio/mpeg',
- ptt: false,
- waveform: [100, 0, 0, 0, 0, 0, 100],
- fileName: `${title}`,
-
- };
-
- await conn.sendMessage(m.chat, doc, { quoted: m });
-
-
- clearTimeout(timeout);
- delete conn.GURUPLAY[m.sender];
- } else {
- m.reply("Invalid sequence number. Please select the appropriate number from the list above.\nBetween 1 to " + result.allLinks.length);
- }
-};
-
-handler.help = ["play3"];
-handler.tags = ["downloader"];
-handler.command = /^(play3)$/i;
-handler.limit = true;
-export default handler;
-
-function formatBytes(bytes, decimals = 2) {
- if (bytes === 0) return "0 B";
- const k = 1024;
- const dm = decimals < 0 ? 0 : decimals;
- const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
- const i = Math.floor(Math.log(bytes) / Math.log(k));
- return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i];
-}
-
-async function searchAndDownloadMusic(query) {
- try {
- const { videos } = await yts(query);
- if (!videos.length) return "Sorry, no video results were found for this search.";
-
- const allLinks = videos.map(video => ({
- title: video.title,
- url: video.url,
- }));
-
- const jsonData = {
- title: videos[0].title,
- description: videos[0].description,
- duration: videos[0].duration,
- author: videos[0].author.name,
- allLinks: allLinks,
- videoUrl: videos[0].url,
- thumbnail: videos[0].thumbnail,
- };
-
- return jsonData;
- } catch (error) {
- return "Error: " + error.message;
- }
-}
-
-
-async function fetchVideoBuffer() {
- try {
- const response = await fetch(url, {
- method: 'GET',
- headers: {
- 'Access-Control-Allow-Origin': '*'
- }
- });
- return await response.buffer();
- } catch (error) {
- return null;
- }
-}
-
-function generateRandomName() {
- const adjectives = ["happy", "sad", "funny", "brave", "clever", "kind", "silly", "wise", "gentle", "bold"];
- const nouns = ["cat", "dog", "bird", "tree", "river", "mountain", "sun", "moon", "star", "cloud"];
-
- const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)];
- const randomNoun = nouns[Math.floor(Math.random() * nouns.length)];
-
- return randomAdjective + "-" + randomNoun;
-}
diff --git a/plugins/dl-tiktok.js b/plugins/dl-tiktok.js
index 930bd8bc..e1e9a69b 100644
--- a/plugins/dl-tiktok.js
+++ b/plugins/dl-tiktok.js
@@ -1,36 +1,77 @@
-import { tiktokdl } from '@bochilteam/scraper';
import fg from 'api-dylux';
+import axios from 'axios';
+import cheerio from 'cheerio';
+import {tiktok} from '@xct007/frieren-scraper';
+import {generateWAMessageFromContent} from '@whiskeysockets/baileys';
+import {tiktokdl} from '@bochilteam/scraper';
+const CFROSAPI = global.APIs.CFROSAPI;
+const handler = async (m, {conn, text, args, usedPrefix, command}) => {
+ if (!text) throw `_*STAR TIKTOK DL*_\n\n*_Paste a tiktok link._*\n\n*_Example:_* _${usedPrefix + command} Url here_`;
+ if (!/(?:https:?\/{2})?(?:w{3}|vm|vt|t)?\.?tiktok.com\/([^\s&]+)/gi.test(text)) throw `_*STAR TIKTOK DL*_\n\n*_Enter a TikTok link._*\n\n*_Example:_* _${usedPrefix + command} Url here_`;
-let handler = async (m, { conn, text, args, usedPrefix, command }) => {
-
- if (!args[0] && m.quoted && m.quoted.text) {
- args[0] = m.quoted.text;
-}
-if (!args[0] && !m.quoted) throw `Give the link of the video Tiktok or quote a tiktok link`;
- if (!args[0].match(/tiktok/gi)) throw `Verify that the link is from TikTok`;
-
-
- let txt = '๐๐๐ฐ๐-๐ผ๐ณ-๐
๐ธ ๐๐-๐ณ๐๐ ๐๐๐๐๐๐๐';
+ // let buttons = [{ buttonText: { displayText: 'โซ ๐ฐ๐๐ณ๐ธ๐พ โซ' }, buttonId: `${usedPrefix}tomp3` }]
+ try {
+ m.react(rwait)
+ const dataFn = await conn.getFile(`${CFROSAPI}/api/tiktokv2?url=${args[0]}`);
+ const desc1n = `*_|ยฉSTAR-MD-V2|_*`;
+ await conn.sendMessage(m.chat, {video: dataFn.data, caption: desc1n}, {quoted: m});
+ m.react(done)
+ } catch (ee1) {
try {
- const { author: { nickname }, video, description } = await tiktokdl(args[0]);
- const url = video.no_watermark2 || video.no_watermark || 'https://tikcdn.net' + video.no_watermark_raw || video.no_watermark_hd;
-
- if (!url) throw global.error;
-
- conn.sendFile(m.chat, url, 'tiktok.mp4', '', m);
- } catch (err) {
+ //const aa = {quoted: m, userJid: conn.user.jid};
+ //const prep = generateWAMessageFromContent(m.chat, {extendedTextMessage: {text: texto, contextInfo: {externalAdReply: {title: '๐๐๐๐๐๐-๐๐๐-๐๐', body: null, thumbnail: imagen1, sourceUrl: 'https://github.com/PRINCE-GDS/THE-PRINCE-BOT'}, mentionedJid: [m.sender]}}}, aa);
+ //await conn.relayMessage(m.chat, prep.message, {messageId: prep.key.id, mentions: [m.sender]});
+ const dataF = await tiktok.v1(args[0]);
+ // let desc1 = `*๐ฝ๐ธ๐ฒ๐บ๐ฝ๐ฐ๐ผ๐ด:* ${dataF.nickname || 'Indefinido'}`
+ const desc1 = `*_Here is your requested video_*`;
+ await conn.sendMessage(m.chat, {video: {url: dataF.play}, caption: desc1}, {quoted: m});
+ m.react(done)
+ } catch (e1) {
try {
- let p = await fg.tiktok(args[0]);
- conn.sendFile(m.chat, p.play, 'tiktok.mp4', txt, m);
- } catch {
- m.reply('*An unexpected error occurred*');
+ const tTiktok = await tiktokdlF(args[0]);
+ // let desc2 = `๐ *Url:* ${tTiktok.video}`
+ const desc2 = `*_Here is your requested video_*`;
+ await conn.sendMessage(m.chat, {video: {url: tTiktok.video}, caption: desc2}, {quoted: m});
+ m.react(done)
+ } catch (e2) {
+ try {
+ const p = await fg.tiktok(args[0]);
+ // let te = `*๐๐๐ด๐๐ฝ๐ฐ๐ผ๐ด:* ${p.author || 'Indefinido'}`
+ const te = `*_Here is your requested video_*`;
+ await conn.sendMessage(m.chat, {video: {url: p.nowm}, caption: te}, {quoted: m});
+ m.react(done)
+ } catch (e3) {
+ try {
+ const {author: {nickname}, video, description} = await tiktokdl(args[0]);
+ const url = video.no_watermark2 || video.no_watermark || 'https://tikcdn.net' + video.no_watermark_raw || video.no_watermark_hd;
+ // let cap = `*๐ฝ๐ธ๐ฒ๐บ๐ฝ๐ฐ๐ผ๐ด:* ${nickname || 'Indefinido'}`
+ const cap = `*_Here is your requested video_*`;
+ await conn.sendMessage(m.chat, {video: {url: url}, caption: cap}, {quoted: m});
+ m.react(done)
+ } catch {
+ throw `*_An or occurred. Please try again later._*`;
+ }
+ }
+ }
}
}
};
-
-handler.help = ['tiktok'].map((v) => v + ' ');
+handler.command = /^(tiktok|tk|ttdl|tiktokdl|tiktoknowm|tt|ttnowm|tiktokaudio)$/i;
handler.tags = ['downloader'];
-handler.command = /^t(t|iktok(d(own(load(er)?)?|l))?|td(own(load(er)?)?|l))$/i;
-
export default handler;
+
+async function tiktokdlF(url) {
+ if (!/tiktok/.test(url)) return `_*STAR TIKTOK DL*_\n\n*_Paste a tiktok link._*\n\n*_Example:_* _${usedPrefix + command} Url here_`;
+ const gettoken = await axios.get('https://tikdown.org/id');
+ const $ = cheerio.load(gettoken.data);
+ const token = $('#download-form > input[type=hidden]:nth-child(2)').attr( 'value' );
+ const param = {url: url, _token: token};
+ const {data} = await axios.request('https://tikdown.org/getAjax?', {method: 'post', data: new URLSearchParams(Object.entries(param)), headers: {'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'}});
+ const getdata = cheerio.load(data.html);
+ if (data.status) {
+ return {status: true, thumbnail: getdata('img').attr('src'), video: getdata('div.download-links > div:nth-child(1) > a').attr('href'), audio: getdata('div.download-links > div:nth-child(2) > a').attr('href')};
+ } else {
+ return {status: false};
+ }
+}
\ No newline at end of file
diff --git a/plugins/e-menu.js b/plugins/e-menu.js
new file mode 100644
index 00000000..0e7f0ced
--- /dev/null
+++ b/plugins/e-menu.js
@@ -0,0 +1,232 @@
+import {
+ promises,
+ readFileSync
+ } from "fs"
+ import {
+ join
+ } from "path"
+ import {
+ xpRange
+ } from "../lib/levelling.js"
+ import moment from "moment-timezone"
+ import os from "os"
+ import fs from "fs"
+ import fetch from "node-fetch"
+
+ const defaultMenu = {
+ before: `
+โญโโ๐ ๐บ๐ป๐จ๐น-๐ด๐ซ-๐ฝ๐๐โโโฌค
+โ ๐ค ๐ด๐ฒ๐ค๐ฑ: *%name*
+โ ๐ง ๐ฃ๐ค๐ต: ๐ธ๐๐ถ๐ธ๐ฟ
+โ โ๏ธ ๐ฌ๐ฎ๐ฃ๐ค: *%mode*
+โ ๐ป ๐ฏ๐ซ๐ ๐ณ๐ฅ๐ฎ๐ฑ๐ฌ: *%platform*
+โ ๐ ๏ธ ๐ณ๐ธ๐ฏ๐ค: ๐๐ฐ๐ฅ๐ฆ๐๐ด
+โ ๐ ๐ก๐ ๐จ๐ซ๐ค๐ธ๐ฒ: ๐ฌ๐ด๐ซ๐ณ๐จ๐ฃ๐ค๐ต๐จ๐ข๐ค
+โ ๐ ๐ฏ๐ฑ๐ค๐ฅ๐จ๐ท: [ *%_p* ]
+โ โฑ๏ธ ๐ด๐ฏ๐ณ๐จ๐ฌ๐ค: *%muptime*
+โ ๐๏ธ ๐ฃ๐ ๐ณ๐ ๐ก๐ ๐ฒ๐ค: *%totalreg*
+โ ๐ ๐ข๐ฎ๐ฌ๐ฌ๐ ๐ญ๐ฃ๐ฒ: *%totalfeatures*
+โ โฐ ๐ณ๐จ๐ฌ๐ค: *%ucpn*
+โฐโโโโโโโโโโโโโโโโโโโโโฌค
+*โยฉ๏ผณ๏ผด๏ผก๏ผฒ-๏ผญ๏ผค-๏ผถ๏ผโ*
+
+
+ %readmore
+ `.trimStart(),
+ header: "โโโชฉใ `%category` ใโชฉ",
+ body: "โโณ %cmd %isPremium %islimit",
+ footer: "โฐโโโโโโโโโโโโโโโโโโชฉ",
+ after: "ยฉ๐๐๐ฐ๐-๐ผ๐ณ-๐
๐ธ",
+ }
+ let handler = async (m, {
+ conn,
+ usedPrefix: _p,
+ __dirname,
+ args
+ }) => {
+ await conn.sendMessage(m.chat, {
+ react: {
+ text: "๐ฎ",
+ key: m.key,
+ }
+ })
+
+ let tags = {}
+
+ try {
+
+ /* Info Menu */
+ let glb = global.db.data.users
+ let usrs = glb[m.sender]
+ let tag = `@${m.sender.split("@")[0]}`
+ let mode = process.env.MODE || (global.opts["self"] ? "Private" : "Public");
+ let _package = JSON.parse(await promises.readFile(join(__dirname, "../package.json")).catch(_ => ({}))) || {}
+ let {
+ age,
+ exp,
+ limit,
+ level,
+ role,
+ registered,
+ credit
+ } = glb[m.sender]
+ let {
+ min,
+ xp,
+ max
+ } = xpRange(level, global.multiplier)
+ let name = await conn.getName(m.sender)
+ let premium = glb[m.sender].premiumTime
+ let prems = `${premium > 0 ? "Premium": "Free"}`
+ let platform = os.platform()
+
+
+ let ucpn = `${ucapan()}`
+
+ let _uptime = process.uptime() * 1000
+ let _muptime
+ if (process.send) {
+ process.send("uptime")
+ _muptime = await new Promise(resolve => {
+ process.once("message", resolve)
+ setTimeout(resolve, 1000)
+ }) * 1000
+ }
+ let muptime = clockString(_muptime)
+ let uptime = clockString(_uptime)
+
+
+ let totalfeatures = Object.values(global.plugins).filter((v) => v.help && v.tags).length;
+ let totalreg = Object.keys(glb).length
+ let help = Object.values(global.plugins).filter(plugin => !plugin.disabled).map(plugin => {
+ return {
+ help: Array.isArray(plugin.tags) ? plugin.help : [plugin.help],
+ tags: Array.isArray(plugin.tags) ? plugin.tags : [plugin.tags],
+ prefix: "customPrefix" in plugin,
+ limit: plugin.limit,
+ premium: plugin.premium,
+ enabled: !plugin.disabled,
+ }
+ })
+ for (let plugin of help)
+ if (plugin && "tags" in plugin)
+ for (let tag of plugin.tags)
+ if (!(tag in tags) && tag) tags[tag] = tag
+ conn.menu = conn.menu ? conn.menu : {}
+ let before = conn.menu.before || defaultMenu.before
+ let header = conn.menu.header || defaultMenu.header
+ let body = conn.menu.body || defaultMenu.body
+ let footer = conn.menu.footer || defaultMenu.footer
+ let after = conn.menu.after || (conn.user.jid == global.conn.user.jid ? "" : `Powered by https://wa.me/${global.conn.user.jid.split`@`[0]}`) + defaultMenu.after
+ let _text = [
+ before,
+ ...Object.keys(tags).map(tag => {
+ return header.replace(/%category/g, tags[tag]) + "\n" + [
+ ...help.filter(menu => menu.tags && menu.tags.includes(tag) && menu.help).map(menu => {
+ return menu.help.map(help => {
+ return body.replace(/%cmd/g, menu.prefix ? help : "%_p" + help)
+ .replace(/%islimit/g, menu.limit ? "โ" : "")
+ .replace(/%isPremium/g, menu.premium ? "๐
" : "")
+ .trim()
+ }).join("\n")
+ }),
+ footer
+ ].join("\n")
+ }),
+ after
+ ].join("\n")
+ let text = typeof conn.menu == "string" ? conn.menu : typeof conn.menu == "object" ? _text : ""
+ let replace = {
+ "%": "%",
+ p: _p,
+ uptime,
+ muptime,
+ me: conn.getName(conn.user.jid),
+ npmname: _package.name,
+ npmdesc: _package.description,
+ version: _package.version,
+ exp: exp - min,
+ maxexp: xp,
+ totalexp: exp,
+ xp4levelup: max - exp,
+ github: _package.homepage ? _package.homepage.url || _package.homepage : "[unknown github url]",
+ tag,
+ ucpn,
+ platform,
+ mode,
+ _p,
+ credit,
+ age,
+ tag,
+ name,
+ prems,
+ level,
+ limit,
+ name,
+ totalreg,
+ totalfeatures,
+ role,
+ readmore: readMore
+ }
+ text = text.replace(new RegExp(`%(${Object.keys(replace).sort((a, b) => b.length - a.length).join`|`})`, "g"), (_, name) => "" + replace[name])
+ const pp = './Assets/STAR-V2.jpg'
+
+
+ let contact = { key: { fromMe: false, participant: `${m.sender.split`@`[0]}@s.whatsapp.net`, ...(m.chat ? { remoteJid: '16504228206@s.whatsapp.net' } : {}) }, message: { contactMessage: { displayName: `${name}`, vcard: `BEGIN:VCARD\nVERSION:3.0\nN:;a,;;;\nFN:${name}\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`}}}
+
+ conn.sendMessage(m.chat, { video: { url: menuvid }, caption: text.trim(), gifPlayback: true,
+ gifAttribution: 0}, { quoted: contact })
+
+ } catch (e) {
+ await conn.reply(m.chat, " error", m)
+ throw e
+ }
+ }
+ handler.command = /^(extramenu|emenu|\?)$/i
+
+
+
+ export default handler
+
+
+ function pickRandom(list) {
+ return list[Math.floor(Math.random() * list.length)]
+ }
+
+ const more = String.fromCharCode(8206)
+ const readMore = more.repeat(4001)
+
+ function clockString(ms) {
+ let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000)
+ let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
+ return [h, " H ", m, " M ", s, " S "].map(v => v.toString().padStart(2, 0)).join("")
+ }
+
+ function clockStringP(ms) {
+ let ye = isNaN(ms) ? "--" : Math.floor(ms / 31104000000) % 10
+ let mo = isNaN(ms) ? "--" : Math.floor(ms / 2592000000) % 12
+ let d = isNaN(ms) ? "--" : Math.floor(ms / 86400000) % 30
+ let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000) % 24
+ let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
+ return [ye, " *Years ๐๏ธ*\n", mo, " *Month ๐*\n", d, " *Days โ๏ธ*\n", h, " *Hours ๐*\n", m, " *Minute โฐ*\n", s, " *Second โฑ๏ธ*"].map(v => v.toString().padStart(2, 0)).join("")
+ }
+
+ function ucapan() {
+ const time = moment.tz("Nigeria/Lagos").format("HH")
+ let res = "๐"
+ if (time >= 4) {
+ res = "๐"
+ }
+ if (time >= 10) {
+ res = "โ๏ธ"
+ }
+ if (time >= 15) {
+ res = "๐"
+ }
+ if (time >= 18) {
+ res = " ๐"
+ }
+ return res
+ }
\ No newline at end of file
diff --git a/plugins/econ-leaderboard.js b/plugins/econ-leaderboard.js
index 37506d66..b22d9e0a 100644
--- a/plugins/econ-leaderboard.js
+++ b/plugins/econ-leaderboard.js
@@ -10,7 +10,7 @@ let handler = async (m, { conn, args, usedPrefix, participants }) => {
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender;
let user = global.db.data.users[who];
if (!(who in global.db.data.users)) throw 'โณ๏ธ The user is not found in my database';
- let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './XLICON.jpg');
+ let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './STAR.jpg');
let about = (await conn.fetchStatus(who).catch(console.error))?.status || '';
let { name, exp, credit, lastclaim, registered, regTime, age, level, role, warn } = global.db.data.users[who];
let { min, xp, max } = xpRange(user.level, global.multiplier);
diff --git a/plugins/excel.js b/plugins/excel.js
new file mode 100644
index 00000000..d8c166cc
--- /dev/null
+++ b/plugins/excel.js
@@ -0,0 +1,12 @@
+let handler = async m => m.reply(`
+I'M STAR MD V2 BY THE TALENTED EXCEL AMADI
+TYPE *menu TO SEE MY COMMANDS
+โน๏ธFOLLOW DEVELOPER:- https://github.com/Xcelsama
+GET IN TOUCH
+https://linktr.ee/Xcelsama
+`.trim())
+handler.help = ['hey']
+handler.tags = ['main']
+handler.command = ['whoareyou', 'hey']
+
+export default handler
\ No newline at end of file
diff --git a/plugins/fun-gay.js b/plugins/fun-gay.js
index 18a2a0b7..7985295a 100644
--- a/plugins/fun-gay.js
+++ b/plugins/fun-gay.js
@@ -1,7 +1,7 @@
let handler = async (m, { conn }) => {
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
let name = conn.getName(who)
- let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './XLICON.jpg')
+ let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './STAR.jpg')
conn.sendFile(m.chat, global.API('https://some-random-api.com', '/canvas/overlay/gay', {
avatar: pp,
}), 'gay.png', `๐ณ๏ธโ๐ *Gay :* ${name}\n\nWho wants to rape this gayโ ๏ธ? `, m)
diff --git a/plugins/fun-waste.js b/plugins/fun-waste.js
index f7fb9c87..c94346a7 100644
--- a/plugins/fun-waste.js
+++ b/plugins/fun-waste.js
@@ -1,7 +1,7 @@
let handler = async (m, { conn }) => {
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
let name = conn.getName(who)
- let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './XLICON.jpg')
+ let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './STAR.jpg')
conn.sendFile(m.chat, global.API('https://some-random-api.com', '/canvas/overlay/wasted', {
avatar: pp,
}), 'waste.png', `*Ah! Shit :* ${name}\n\nWastedeeznuts`, m)
diff --git a/plugins/funnz.js b/plugins/funnz.js
new file mode 100644
index 00000000..a059aafd
--- /dev/null
+++ b/plugins/funnz.js
@@ -0,0 +1,35 @@
+let handler = async (m, { conn, command, text, usedPrefix, participants }) => {
+ if (!text) throw "Mention whose you want to check character"
+ const mentionedUser = m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : args[2] ? (args[2].replace(/[@ .+-]/g, '') + '@s.whatsapp.net') : ''
+ const userChar = [
+ "Sigma",
+ "Generous",
+ "Grumpy",
+ "Overconfident",
+ "Obedient",
+ "Good",
+ "Simp",
+ "Kind",
+ "Patient",
+ "Pervert",
+ "Cool",
+ "Helpful",
+ "Brilliant",
+ "Sexy",
+ "Hot",
+ "Gorgeous",
+ "Cute",
+ ]
+ const userCharacterSeletion =
+ userChar[Math.floor(Math.random() * userChar.length)]
+
+ let message = `Character of @${mentionedUser.split("@")[0]} is *${userCharacterSeletion}* ๐ฅโก`
+
+ conn.sendMessage(m.chat, { text: message, mentions: [mentionedUser] }, { quoted: m })
+
+}
+handler.help = ["character @tag"]
+handler.tags = ['fun']
+handler.command = /^(character)/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/game-ppt.js b/plugins/game-ppt.js
index 0a09405c..e3137439 100644
--- a/plugins/game-ppt.js
+++ b/plugins/game-ppt.js
@@ -21,26 +21,26 @@ let handler = async (m, { conn, text, usedPrefix, command }) => {
} else if (text == 'rock') {
if (astro == 'scissors') {
global.db.data.users[m.sender].exp += 300
- m.reply(`โข *Won* ๐\n\nโฃ You : ${text}\nโฃ GURU : ${astro}\n\n๐ Points *+${poin} XP*`)
+ m.reply(`โข *Won* ๐\n\nโฃ You : ${text}\nโฃ EXCEL : ${astro}\n\n๐ Points *+${poin} XP*`)
} else {
global.db.data.users[m.sender].exp -= 300
- m.reply(`โข *lost*\n\nโฃ You : ${text}\nโฃ GURU : ${astro}\n\n Points *-${poin} XP*`)
+ m.reply(`โข *lost*\n\nโฃ You : ${text}\nโฃ EXCEL : ${astro}\n\n Points *-${poin} XP*`)
}
} else if (text == 'scissors') {
if (astro == 'paper') {
global.db.data.users[m.sender].exp += 300
- m.reply(`โข *won* ๐\n\nโฃ You : ${text}\nโฃ GURU : ${astro}\n\n๐ Points *+${poin} XP*`)
+ m.reply(`โข *won* ๐\n\nโฃ You : ${text}\nโฃ EXCEL : ${astro}\n\n๐ Points *+${poin} XP*`)
} else {
global.db.data.users[m.sender].exp -= 300
- m.reply(`โข *lost*\n\nโฃ You : ${text}\nโฃ GURU : ${astro}\n\nPoints *-${poin} XP*`)
+ m.reply(`โข *lost*\n\nโฃ You : ${text}\nโฃ EXCEL : ${astro}\n\nPoints *-${poin} XP*`)
}
} else if (text == 'paper') {
if (astro == 'rock') {
global.db.data.users[m.sender].exp += 300
- m.reply(`โข *won* ๐\n\nโฃ You : ${text}\nโฃ GURU : ${astro}\n\n๐ Points *+${poin} XP*`)
+ m.reply(`โข *won* ๐\n\nโฃ You : ${text}\nโฃ EXCEL : ${astro}\n\n๐ Points *+${poin} XP*`)
} else {
global.db.data.users[m.sender].exp -= 300
- m.reply(`โข *You lost*\n\nโฃ You : ${text}\nโฃ GURU : ${astro}\n\nPoints *-${poin} XP*`)
+ m.reply(`โข *You lost*\n\nโฃ You : ${text}\nโฃ EXCEL : ${astro}\n\nPoints *-${poin} XP*`)
}
} else {
throw reseqv
diff --git a/plugins/getall.js b/plugins/getall.js
new file mode 100644
index 00000000..db79654f
--- /dev/null
+++ b/plugins/getall.js
@@ -0,0 +1,42 @@
+import fetch from 'node-fetch';
+
+const handler = async (m, { conn, text, usedPrefix, command }) => {
+ try {
+ if (!text) {
+ throw `*_Need query._*\n*_Example:_* _${usedPrefix + command} members|user|groups_`;
+ }
+
+ let str = "";
+ let cd = text.split(" ")[0];
+
+ if (cd === "members" || cd === "member") {
+ if (!m.isGroup) return m.reply("This command can only be used in a group.");
+ const participants = m.metadata.participants || {};
+ for (let i of participants) {
+ str += `๐ ${i.id}\n`;
+ }
+ str ? m.reply(`*ใ LIST OF GROUP MEMBER'S JID ใ*\n\n` + str) : m.reply("*Request Denied!*");
+ } else if (cd == "user" || cd == "pm" || cd == "pc") {
+ let anu = await conn.chats.all().filter(v => v.id.endsWith('.net')).map(v => v);
+ for (let i of anu) {
+ str += `๐ ${i.id}\n`;
+ }
+ str ? m.reply(`*ใ LIST OF PERSONAL CHAT JIDS ใ*\n\nTotal ${anu.length} users are text in personal chat.\n\n` + str) : m.reply("*Request Denied!*");
+ } else if (cd == "group" || cd == "groups" || cd == "gc") {
+ n = await conn.groupFetchAllParticipating();
+ const c = Object.entries(n).slice(0).map(t => t[1]);
+ for (var i of c.map(t => t.id)) {
+ str += `๐ ${i}\n`;
+ }
+ str ? m.reply(`*ใ LIST OF GROUP CHAT JIDSใ*\n\n` + str) : m.reply("*Request Denied!*");
+ } else {
+ return await m.reply(`*Use ${usedPrefix}getall pc| gc| member!*`);
+ }
+ } catch (e) {
+ m.error(`${e}\n\nCommand getall`, e);
+ }
+};
+
+handler.command = /^getall$/i;
+handler.tags = ['owner'];
+export default handler;
\ No newline at end of file
diff --git a/plugins/getjoinrequest.js b/plugins/getjoinrequest.js
new file mode 100644
index 00000000..7e866c8c
--- /dev/null
+++ b/plugins/getjoinrequest.js
@@ -0,0 +1,29 @@
+let handler = async (m, { conn, usedPrefix, command }) => {
+ const response = await conn.groupRequestParticipantsList(m.chat);
+ if (!response || !response.length) {
+ conn.reply(m.chat, 'No pending join requests. โ
', m);
+ return;
+ }
+
+ let replyMessage = '๐ Join Request List:\n';
+ response.forEach((request, index) => {
+ const { jid, request_method, request_time } = request;
+ const formattedTime = new Date(parseInt(request_time) * 1000).toLocaleString();
+
+ replyMessage += `\n*No.: ${index + 1} Request Details. ๐*`;
+ replyMessage += `\n๐งโโ๏ธ *JID:* ${jid}`;
+ replyMessage += `\n๐งช *Method:* ${request_method}`;
+ replyMessage += `\nโฐ *Time:* ${formattedTime}\n`;
+ });
+
+ conn.reply(m.chat, replyMessage, m);
+};
+
+handler.help = ['getjoinreq'];
+handler.tags = ['group', 'admins'];
+handler.command = /^(getjoinreq)$/i;
+handler.admin = true;
+handler.group = true;
+handler.botAdmin = true;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/gp-kick.js b/plugins/gp-kick.js
index e9c24e10..2eafbf4d 100644
--- a/plugins/gp-kick.js
+++ b/plugins/gp-kick.js
@@ -1,7 +1,7 @@
let handler = async (m, { conn, participants, usedPrefix, command }) => {
-let kickte = `โ
Correct use of the command\n*${usedPrefix + command}* @tag`
+let kickte = `โ
Correct use of the command\n*${usedPrefix + command}*`
if (!m.mentionedJid[0] && !m.quoted) return m.reply(kickte, m.chat, { mentions: conn.parseMention(kickte)})
let user = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted.sender
diff --git a/plugins/gp-profile.js b/plugins/gp-profile.js
index e7afce3e..9626a5c7 100644
--- a/plugins/gp-profile.js
+++ b/plugins/gp-profile.js
@@ -5,7 +5,7 @@ let handler = async (m, { conn, usedPrefix, command}) => {
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
-let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './XLICON.jpg')
+let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './STAR.jpg')
let user = global.db.data.users[who]
let about = (await conn.fetchStatus(who).catch(console.error) || {}).status || ''
let { name, exp, credit, lastclaim, registered, regTime, age, level, role, wealth, warn } = global.db.data.users[who]
diff --git a/plugins/hdr.js b/plugins/hdr.js
index c672003b..dfc15015 100644
--- a/plugins/hdr.js
+++ b/plugins/hdr.js
@@ -70,7 +70,7 @@ let handler = async (m, { conn, usedPrefix, command }) => {
let error;
try {
const This = await processing(img, "enhance");
- conn.sendFile(m.chat, This, "", "Nih...", m);
+ conn.sendFile(m.chat, This, "", "๐๐๐๐-๐๐-๐๐ ๐๐ ๐๐ง๐ก๐๐ง๐๐๐ซ...", m);
} catch (er) {
error = true;
} finally {
diff --git a/plugins/img-gimage.js b/plugins/img-gimage.js
index b05bda5a..43fa730c 100644
--- a/plugins/img-gimage.js
+++ b/plugins/img-gimage.js
@@ -1,44 +1,16 @@
-import fetch from 'node-fetch';
-
-let handler = async (m, { conn, text, usedPrefix, command }) => {
- if (!text && !(m.quoted && m.quoted.text)) {
- throw `Please provide some text , Example usage ${usedPrefix}img sunnyleone`;
- }
- if (!text && m.quoted && m.quoted.text) {
- text = m.quoted.text;
- }
-
- const match = text.match(/(\d+)/);
- const numberOfImages = match ? parseInt(match[1]) : 1;
-
- try {
- m.reply('*Please wait*');
-
- const images = [];
-
- for (let i = 0; i < numberOfImages; i++) {
- const endpoint = `https://api.guruapi.tech/api/googleimage?text=${encodeURIComponent(text)}`;
- const response = await fetch(endpoint);
-
- if (response.ok) {
- const imageBuffer = await response.buffer();
- images.push(imageBuffer);
- } else {
- throw '*Image generation failed*';
- }
- }
-
-
- for (let i = 0; i < images.length; i++) {
- await conn.sendFile(m.chat, images[i], `image_${i + 1}.png`, null, m);
- }
- } catch {
- throw '*Oops! Something went wrong while generating images. Please try again later.*';
- }
-};
-
-handler.help = ['image'];
-handler.tags = ['fun'];
-handler.command = ['img', 'gimage'];
-
-export default handler;
+import { googleImage } from '@bochilteam/scraper'
+var handler = async (m, { conn, text, usedPrefix, command }) => {
+ if (!text) throw `Use example ${usedPrefix}${command} Minecraft`
+ const res = await googleImage(text)
+ let image = res.getRandom()
+ let link = image
+ conn.sendFile(m.chat, link, 'google.jpg', `*STAR.jpg*
+๐ *Result:* ${text}
+๐ *Source:* Google
+`,m)
+}
+handler.help = ['gimage ', 'image ']
+handler.tags = ['internet']
+handler.command = /^(gimage|image)$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/kik.js b/plugins/kik.js
new file mode 100644
index 00000000..c815647f
--- /dev/null
+++ b/plugins/kik.js
@@ -0,0 +1,17 @@
+let handler = async (m, { conn, text, participants, isAdmin, isOwner, groupMetadata }) => {
+ if (/^([\u0000-\u00ff]+)kickall$/i.test(text)) {
+ if (!isAdmin) return m.reply('Only admins can use this command!')
+ for (let user of participants.map(u => u.id).filter(v => v !== conn.user.jid)) {
+ await conn.groupRemove(m.chat, [user])
+ }
+ m.reply('All members kicked from the group!')
+ }
+}
+
+handler.help = ['kickall']
+handler.tags = ['group']
+handler.command = ['kickall']
+handler.admin = true
+handler.group = true
+
+export default handler
\ No newline at end of file
diff --git a/plugins/list.js b/plugins/list.js
new file mode 100644
index 00000000..4405ad94
--- /dev/null
+++ b/plugins/list.js
@@ -0,0 +1,221 @@
+import {
+ promises,
+ readFileSync
+ } from "fs"
+ import {
+ join
+ } from "path"
+ import {
+ xpRange
+ } from "../lib/levelling.js"
+ import moment from "moment-timezone"
+ import os from "os"
+ import fs from "fs"
+ import fetch from "node-fetch"
+
+ const defaultMenu = {
+ before: `
+
+*STAR-MD-V2 HAS* *%totalfeatures* Commands
+
+
+*STAR-MD-V2-COMMAND-LIST*
+
+ `.trimStart(),
+ header: "",
+ body: "โโบ %cmd %isPremium %islimit",
+ footer: "",
+ after: "\n%me",
+ }
+ let handler = async (m, {
+ conn,
+ usedPrefix: _p,
+ __dirname,
+ args
+ }) => {
+ await conn.sendMessage(m.chat, {
+ react: {
+ text: "๐",
+ key: m.key,
+ }
+ })
+
+ let tags = {}
+
+ try {
+
+ /* Info Menu */
+ let glb = global.db.data.users
+ let usrs = glb[m.sender]
+ let tag = `@${m.sender.split("@")[0]}`
+ let mode = process.env.MODE || (global.opts["self"] ? "Private" : "Public");
+ let _package = JSON.parse(await promises.readFile(join(__dirname, "../package.json")).catch(_ => ({}))) || {}
+ let {
+ age,
+ exp,
+ limit,
+ level,
+ role,
+ registered,
+ credit
+ } = glb[m.sender]
+ let {
+ min,
+ xp,
+ max
+ } = xpRange(level, global.multiplier)
+ let name = await conn.getName(m.sender)
+ let premium = glb[m.sender].premiumTime
+ let prems = `${premium > 0 ? "Premium": "Free"}`
+ let platform = os.platform()
+
+
+ let ucpn = `${ucapan()}`
+
+ let _uptime = process.uptime() * 1000
+ let _muptime
+ if (process.send) {
+ process.send("uptime")
+ _muptime = await new Promise(resolve => {
+ process.once("message", resolve)
+ setTimeout(resolve, 1000)
+ }) * 1000
+ }
+ let muptime = clockString(_muptime)
+ let uptime = clockString(_uptime)
+
+
+ let totalfeatures = Object.values(global.plugins).filter((v) => v.help && v.tags).length;
+ let totalreg = Object.keys(glb).length
+ let help = Object.values(global.plugins).filter(plugin => !plugin.disabled).map(plugin => {
+ return {
+ help: Array.isArray(plugin.tags) ? plugin.help : [plugin.help],
+ tags: Array.isArray(plugin.tags) ? plugin.tags : [plugin.tags],
+ prefix: "customPrefix" in plugin,
+ limit: plugin.limit,
+ premium: plugin.premium,
+ enabled: !plugin.disabled,
+ }
+ })
+ for (let plugin of help)
+ if (plugin && "tags" in plugin)
+ for (let tag of plugin.tags)
+ if (!(tag in tags) && tag) tags[tag] = tag
+ conn.menu = conn.menu ? conn.menu : {}
+ let before = conn.menu.before || defaultMenu.before
+ let header = conn.menu.header || defaultMenu.header
+ let body = conn.menu.body || defaultMenu.body
+ let footer = conn.menu.footer || defaultMenu.footer
+ let after = conn.menu.after || (conn.user.jid == global.conn.user.jid ? "" : `Powered by https://wa.me/${global.conn.user.jid.split`@`[0]}`) + defaultMenu.after
+ let _text = [
+ before,
+ ...Object.keys(tags).map(tag => {
+ return header.replace(/%category/g, tags[tag]) + "\n" + [
+ ...help.filter(menu => menu.tags && menu.tags.includes(tag) && menu.help).map(menu => {
+ return menu.help.map(help => {
+ return body.replace(/%cmd/g, menu.prefix ? help : "%_p" + help)
+ .replace(/%islimit/g, menu.limit ? "โ" : "")
+ .replace(/%isPremium/g, menu.premium ? "๐
" : "")
+ .trim()
+ }).join("\n")
+ }),
+ footer
+ ].join("\n")
+ }),
+ after
+ ].join("\n")
+ let text = typeof conn.menu == "string" ? conn.menu : typeof conn.menu == "object" ? _text : ""
+ let replace = {
+ "%": "%",
+ p: _p,
+ uptime,
+ muptime,
+ me: conn.getName(conn.user.jid),
+ npmname: _package.name,
+ npmdesc: _package.description,
+ version: _package.version,
+ exp: exp - min,
+ maxexp: xp,
+ totalexp: exp,
+ xp4levelup: max - exp,
+ github: _package.homepage ? _package.homepage.url || _package.homepage : "[unknown github url]",
+ tag,
+ ucpn,
+ platform,
+ mode,
+ _p,
+ credit,
+ age,
+ tag,
+ name,
+ prems,
+ level,
+ limit,
+ name,
+ totalreg,
+ totalfeatures,
+ role,
+ readmore: readMore
+ }
+ text = text.replace(new RegExp(`%(${Object.keys(replace).sort((a, b) => b.length - a.length).join`|`})`, "g"), (_, name) => "" + replace[name])
+ const pp = './Assets/STAR-V2.jpg'
+
+
+ let contact = { key: { fromMe: false, participant: `${m.sender.split`@`[0]}@s.whatsapp.net`, ...(m.chat ? { remoteJid: '16504228206@s.whatsapp.net' } : {}) }, message: { contactMessage: { displayName: `${name}`, vcard: `BEGIN:VCARD\nVERSION:3.0\nN:;a,;;;\nFN:${name}\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`}}}
+
+ conn.sendMessage(m.chat, { video: { url: menuvid }, caption: text.trim(), gifPlayback: true,
+ gifAttribution: 0}, { quoted: contact })
+
+ } catch (e) {
+ await conn.reply(m.chat, " error", m)
+ throw e
+ }
+ }
+ handler.command = /^(list||\?)$/i
+
+
+
+ export default handler
+
+
+ function pickRandom(list) {
+ return list[Math.floor(Math.random() * list.length)]
+ }
+
+ const more = String.fromCharCode(8206)
+ const readMore = more.repeat(4001)
+
+ function clockString(ms) {
+ let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000)
+ let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
+ return [h, " H ", m, " M ", s, " S "].map(v => v.toString().padStart(2, 0)).join("")
+ }
+
+ function clockStringP(ms) {
+ let ye = isNaN(ms) ? "--" : Math.floor(ms / 31104000000) % 10
+ let mo = isNaN(ms) ? "--" : Math.floor(ms / 2592000000) % 12
+ let d = isNaN(ms) ? "--" : Math.floor(ms / 86400000) % 30
+ let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000) % 24
+ let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
+ return [ye, " *Years ๐๏ธ*\n", mo, " *Month ๐*\n", d, " *Days โ๏ธ*\n", h, " *Hours ๐*\n", m, " *Minute โฐ*\n", s, " *Second โฑ๏ธ*"].map(v => v.toString().padStart(2, 0)).join("")
+ }
+
+ function ucapan() {
+ const time = moment.tz("Nigeria/Lagos").format("HH")
+ let res = "MORNING๐"
+ if (time >= 4) {
+ res = "MORNING๐"
+ }
+ if (time >= 10) {
+ res = "AFTERNOONโ๏ธ"
+ }
+ if (time >= 15) {
+ res = "AFTERNOON๐"
+ }
+ if (time >= 18) {
+ res = "GOOD NIGHT ๐"
+ }
+ return res
+ }
\ No newline at end of file
diff --git a/plugins/main-Guru.js b/plugins/main-Guru.js
index 7ff09bea..5776d211 100644
--- a/plugins/main-Guru.js
+++ b/plugins/main-Guru.js
@@ -8,17 +8,14 @@ let handler = async m => m.reply(`
Group1:
_____________________
-https://chat.whatsapp.com/EmP3syvou18HrZk6R6nTAK
+https://chat.whatsapp.com/IZ2ThCp54bE8pqZkI85WI7
_______________________
Group2:
_______________________
-https://chat.whatsapp.com/FdwbFnI8Fcf4VTVvFTFk08"
-_________________________
-
-*DEVELOPER*/
-
-1:__________________๐ฐ *MOD'S* ๐ฐ_
+https://chat.whatsapp.com/BYUKtcVPwa9AW48vepO3pw"
+_______________________
+- DEVELOPER
wa.me/2347045035241
*AMADI EXCEL*
_______________________
@@ -39,8 +36,8 @@ _______________________
โฅ๏ธ โ๐ปใ
คย ย ๐ฉ ๐ค
*_หกแถฆแตแต แถแตแตแตแตโฟแต หขแตแตแต หขสฐแตสณแต_*
`.trim())
-handler.help = ['gpguru']
+handler.help = ['gpexcel']
handler.tags = ['main']
-handler.command = ['groups', 'groupguru', 'gugp', 'ggp', 'gpguru']
+handler.command = ['groups', 'groupexcel', 'gpz', 'ggp', 'gpexcel']
export default handler
diff --git a/plugins/main-bingimg.js b/plugins/main-bingimg.js
index 9d00bce0..5d206756 100644
--- a/plugins/main-bingimg.js
+++ b/plugins/main-bingimg.js
@@ -1,7 +1,7 @@
import fetch from 'node-fetch'
let handler = async (m, { conn, text }) => {
- if (!text) throw 'What do you want to create?'
+ if (!text) throw 'STAR-MD-V2:-What do you want to create?'
m.react(rwait)
let msg = encodeURIComponent(text)
let res = await fetch(`https://aemt.me/bingimg?text=${msg}`)
diff --git a/plugins/main-botInfo.js b/plugins/main-botInfo.js
index 80428d79..e158b300 100644
--- a/plugins/main-botInfo.js
+++ b/plugins/main-botInfo.js
@@ -42,28 +42,29 @@ let handler = async (m, { conn, usedPrefix, command }) => {
let speed = neww - old
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
-let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './XLICON.jpg')
+let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './STAR.jpg')
let user = global.db.data.users[who]
let infobt = `
-โญ *INFO STAR-MD-V2BOT* โญ
+๐ *แฮาฯด:-ีอฒแชแก-แทแ -แ2* ๐
- โญโโโโขโงโงโขโโโโฎ
- *โก*.
-โ โซใ *Developer* ใ
+โญโโโโขโขโขโงแ แฌแแฌแฯดแขแฌแกโงโขโขโขโขโโโโฎ
+โ *โก*.
+โ โซใ *ีอฒแชแก-แทแ -แ2* ใ
โ โซ *Name :* Excel
โ โซ *Place :* Nigeria
โ โซ *Gender :* แดแดสแด
-โ โซ *Age :* _15
+โโซ *Age :* _15
โ โซ *Phone :* wa.me/2347045035241
-โ โซ *YouTube :* youtube.com/@s4salmanyt
+โ โซ *TT :* https://tiktok.com
+/@xcelsama
โ โซ *GitHub :* https://github.com/Xcelsama
โ โซ *TT *:- https://tiktok.com/@xcelsama
-โ โซ *Channel* :https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
-โ โซ *Status :* Debugging
- Code._
-ยฉ STAR-MD-V2 BY EXCEL
-
+โ โซ *Channel* :https://whatsapp.com/
+channel/0029Va9wmuz8F2pGIURwmo0m
+โ โซ *Status :* แ แฌแดแฎแแแฮแ แฯดแ แฌ._
+โ
+โยฉ STAR-MD-V2 BY EXCEL
โก *STATE* โก
โซ *${groupsIn.length}* GROUP CHATS
โซ *${groupsIn.length}* united groups
@@ -72,7 +73,7 @@ let infobt = `
โซ *${chats.length}* Total Chats
- *๐ฃ S E R V E R*
+ *๐ฃ ๏ผณ๏ผด๏ผก๏ผฒ-๏ผณ๏ผฅ๏ผฒ๏ผถ๏ผฅ๏ผฒ*
*๐ RAM:* ${format(totalmem() - freemem())} / ${format(totalmem())}
*๐ต FreeRAM:* ${format(freemem())}
diff --git a/plugins/main-cat.js b/plugins/main-cat.js
index f0727918..9a520ff9 100644
--- a/plugins/main-cat.js
+++ b/plugins/main-cat.js
@@ -1,35 +1,18 @@
-import { exec } from 'child_process';
-import now from 'performance-now';
-import cheerio from 'cheerio';
-import fetch from 'node-fetch';
-
-let handler = async (m, {
- conn,
- args,
- usedPrefix,
- text,
- command
-}) => {
- try {
- const start = now();
-
- await conn.sendMessage(m.chat, 'https://cataas.com/cat', 'image', { caption: "*meyaoooooooooooooon!*" });
-
- const end = now();
- const executionTime = (end - start).toFixed(3);
-
- console.log(`Execution time: ${executionTime} milliseconds`);
- } catch (e) {
- console.error(`${e}\n\nCommand: cat`);
-
- const errorMessage = e.toString().includes('text') ? e : 'An error occurred while processing the command.';
-
- await conn.sendMessage(m.chat, errorMessage, 'text', { quoted: m });
- }
-};
-
-handler.help = ['cat'];
-handler.tags = ['logo'];
-handler.command = ['cat'];
-
-export default handler;
+import fetch from 'node-fetch'
+let handler = async (m, { conn, text }) => {
+try {
+let res = await fetch('https://cataas.com/cat')
+let img = await res.buffer()
+let caption = `
+ยฉ๏ผณ๏ผด๏ผก๏ผฒ-๏ผญ๏ผค-๏ผถ๏ผ
+`.trim()
+conn.sendFile(m.chat, img, 'cat.jpg', caption, m)
+} catch (e) {
+console.log(e)
+throw '*Error!*'
+}}
+handler.help = ['cat']
+handler.tags = ['random']
+handler.command = /^cat$/i
+handler.fail = null
+export default handler
\ No newline at end of file
diff --git a/plugins/main-creator.js b/plugins/main-creator.js
index 7b34af81..c0d94c70 100644
--- a/plugins/main-creator.js
+++ b/plugins/main-creator.js
@@ -7,6 +7,6 @@ function handler(m) {
handler.help = ['owner']
handler.tags = ['main']
-handler.command = ['owner', 'creator', 'Excel', 'dueรฑo', 'star']
+handler.command = ['owner', 'creator', 'xcelsama', 'dueรฑo', 'starz']
export default handler
diff --git a/plugins/main-dog.js b/plugins/main-dog.js
new file mode 100644
index 00000000..563e5a58
--- /dev/null
+++ b/plugins/main-dog.js
@@ -0,0 +1,16 @@
+import fetch from 'node-fetch';
+const handler = async (m, {conn, text}) => {
+ try {
+ const res = await fetch('https://api.thedogapi.com/v1/images/search');
+ const img = await res.json();
+ const caption = `_Dog๐_`.trim();
+ conn.sendFile(m.chat, img[0].url, 'dog.jpg', caption, m);
+ } catch {
+ throw '*Error!*';
+ }
+};
+handler.help = ['dog'];
+handler.tags = ['random'];
+handler.command = /^dog$/i;
+handler.fail = null;
+export default handler;
\ No newline at end of file
diff --git a/plugins/main-list.js b/plugins/main-list.js
index 4607207f..3707254b 100644
--- a/plugins/main-list.js
+++ b/plugins/main-list.js
@@ -2,13 +2,13 @@ let handler = async (m, { conn, usedPrefix, command}) => {
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender;
if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`;
- let pp = './XLICON.jpg'
+ let pp = './STAR.jpg'
let more = String.fromCharCode(8206);
let readMore = more.repeat(850);
let lkr;
switch (command) {
- case 'list':
+ case 'list2':
lkr = "*Get excited, here are your options:*\n\n" +
"๐ค *" + usedPrefix + "botmenu* - The Bot's secret control panel. What's your command, oh great one?\n\n" +
"๐ *" + usedPrefix + "ownermenu* - The sacred scroll only for the chosen one. Yep, that's you, Boss!\n\n" +
@@ -77,7 +77,7 @@ break;
โฐโโโ๐๐๐ผ๐โโโโโโโโโโ
โโโโสโขใจโขสโโโโ๐ค
-โโฃ๐พ_${usedPrefix}kick *<@tag>*_
+โโฃ๐พ_${usedPrefix}kick_
โโฃ๐พ_${usedPrefix}promote *<@tag>*_
โโฃ๐พ _${usedPrefix}demote *<@tag>*_
โโฃ๐พ _${usedPrefix}infogroup_
@@ -358,7 +358,7 @@ break;
lkr = `use command ${usedPrefix}nsfw`; //
break;
case 'logomenu':
- lkr = `use ${usedPrefix}logo to see all options \ngfx cmd upto 12`; //
+ lkr = `use ${usedPrefix}gfx to see all options \ngfx cmd upto 12`; //
break;
default:
lkr = `Invalid command. Type ${usedPrefix}list to see available options.`;
@@ -372,7 +372,7 @@ break;
handler.help = ['list', 'botmenu', 'ownermenu', 'groupmenu', 'dlmenu', 'downloadermenu', 'economymenu', 'funmenu', 'gamemenu', 'stickermenu', 'nsfwmenu', 'logomenu', 'toolmenu','animemenu2','animemenu'];
handler.tags = ['main'];
- handler.command = ['list', 'botmenu', 'ownermenu', 'groupmenu', 'dlmenu', 'downloadermenu', 'economymenu', 'funmenu', 'gamemenu', 'stickermenu', 'nsfwmenu', 'logomenu', 'toolmenu','animemenu2','animemenu'];
+ handler.command = ['list2', 'botmenu', 'ownermenu', 'groupmenu', 'dlmenu', 'downloadermenu', 'economymenu', 'funmenu', 'gamemenu', 'stickermenu', 'nsfwmenu', 'logomenu', 'toolmenu','animemenu2','animemenu'];
export default handler
diff --git a/plugins/main-listprem.js b/plugins/main-listprem.js
index a836bea6..bdeea607 100644
--- a/plugins/main-listprem.js
+++ b/plugins/main-listprem.js
@@ -1,7 +1,8 @@
let handler = async (m, { conn, args, usedPrefix, command }) => {
let prem = global.prems.map(v => v.replace(/[^0-9]/g, '') + '@s.whatsapp.net').filter(v => v != conn.user.jid)
-let teks = `โข *PREMIUM USERS*\nโโโโโโโโโโโโโ\n` + prem.map(v => '- @' + v.replace(/@.+/, '')).join`\n`
+let teks = `โข *PREMIUM USERS OF STAR
+*\nโโโโโโโโโโโโโ\n` + prem.map(v => '- @' + v.replace(/@.+/, '')).join`\n`
m.reply(teks, null, {mentions: conn.parseMention(teks)})
}
diff --git a/plugins/main-logomenu.js b/plugins/main-logomenu.js
index 566fa5d6..6dfaf26a 100644
--- a/plugins/main-logomenu.js
+++ b/plugins/main-logomenu.js
@@ -7,8 +7,8 @@ const { levelling } = '../lib/levelling.js'
import moment from 'moment-timezone'
import { promises } from 'fs'
import { join } from 'path'
-const time = moment.tz('Asia/Karachi').format('HH')
-let wib = moment.tz('Asia/Karachi').format('HH:mm:ss')
+const time = moment.tz('Africa/Lagos').format('HH')
+let wib = moment.tz('Africa/Lagos').format('HH:mm:ss')
//import db from '../lib/database.js'
let handler = async (m, { conn, usedPrefix, command}) => {
@@ -36,7 +36,7 @@ let greeting = ucapan()
let quote = quotes[Math.floor(Math.random() * quotes.length)];
let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
-let str = ` *โ๏ธ XLICON-V2 โ๏ธ*
+let str = ` *๐ STAR-MD-V2๐ *
โญโญโญโญโ
โช *LOGO 1* โชโ
โญโญโญ
@@ -57,7 +57,7 @@ let str = ` *โ๏ธ XLICON-V2 โ๏ธ*
โโฌกโธ
โ *${usedPrefix}logo าแดส logo แดแดแดแดแดษดแด
s*
โ Please *${greeting}*
-โ *MADE BY XLICON TEAM*
+โ *MADE BY Excel*
โฐโโโโโโโโโโโโโโโโโโโฏ
๐ *_Quote of the day: ${quote}_* ๐
`
@@ -79,7 +79,7 @@ function clockString(ms) {
return [h, m, s].map(v => v.toString().padStart(2, 0)).join(':')}
function ucapan() {
- const time = moment.tz('Asia/Karachi').format('HH')
+ const time = moment.tz('Africa/Lagos').format('HH')
let res = "happy early in the dayโ๏ธ"
if (time >= 4) {
res = "Good Morning ๐"
diff --git a/plugins/main-logomenu2.js b/plugins/main-logomenu2.js
index 51e49bf1..e69de29b 100644
--- a/plugins/main-logomenu2.js
+++ b/plugins/main-logomenu2.js
@@ -1,70 +0,0 @@
-import { cpus as _cpus, totalmem, freemem } from 'os'
-import util from 'util'
-import { performance } from 'perf_hooks'
-import { sizeFormatter } from 'human-readable'
-let format = sizeFormatter({
- std: 'JEDEC', // 'SI' (default) | 'IEC' | 'JEDEC'
- decimalPlaces: 2,
- keepTrailingZeroes: false,
- render: (literal, symbol) => `${literal} ${symbol}B`,
-})
-let handler = async (m, { conn, usedPrefix, command }) => {
- const chats = Object.entries(conn.chats).filter(([id, data]) => id && data.isChats)
- const groupsIn = chats.filter(([id]) => id.endsWith('@g.us')) //groups.filter(v => !v.read_only)
- const used = process.memoryUsage()
- const cpus = _cpus().map(cpu => {
- cpu.total = Object.keys(cpu.times).reduce((last, type) => last + cpu.times[type], 0)
- return cpu
- })
- const cpu = cpus.reduce((last, cpu, _, { length }) => {
- last.total += cpu.total
- last.speed += cpu.speed / length
- last.times.user += cpu.times.user
- last.times.nice += cpu.times.nice
- last.times.sys += cpu.times.sys
- last.times.idle += cpu.times.idle
- last.times.irq += cpu.times.irq
- return last
- }, {
- speed: 0,
- total: 0,
- times: {
- user: 0,
- nice: 0,
- sys: 0,
- idle: 0,
- irq: 0
- }
- })
- let old = performance.now()
-
- let neww = performance.now()
- let speed = neww - old
- let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
-if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
-//let pp = await conn.profilePictureUrl(who, 'image').catch(_ => './XLICON.jpg')
-let user = global.db.data.users[who]
-
-let infobt = `
-
- *๐ค-LOGOMENU2-๐ค*
- WORKING ON IT๐
- *โฒโโณ FROZEN ๐
- *โฒโโณ
- *โฒโโณ
- *โฒโโณ
- *โฒโโณ
- *โฒโโณ
- *โฒโโณ
-๐ฐ *Created สส XLICON TEAM* ๐ฐ
-`
-
-conn.sendMessage(m.chat,{video : {url :"https://telegra.ph/file/21db634495279e155c37c.mp4",}, caption:infobt,gifPlayback:true },{quoted:m})
-
-
-}
-handler.help = ['logomenu2']
-handler.tags = ['main']
-handler.command = ['logomenu2', 'lgmenu']
-
-export default handler
diff --git a/plugins/main-menu.js b/plugins/main-menu.js
index 49861a58..a6626be5 100644
--- a/plugins/main-menu.js
+++ b/plugins/main-menu.js
@@ -12,69 +12,30 @@ import {
import os from "os"
import fs from "fs"
import fetch from "node-fetch"
-
+
const defaultMenu = {
before: `
- ใ ${botname} ๐MD ใ\n
- *%ucpn*
-โโโโโโโโโโโโโโโโโโ
-https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
-โโโโโโโโโโโโโโโโโโ
-*ยฉExcel Amadi*
-โโโโโโโโโโโโโโโโโโ
-*_Salutations! Its STAR-MD A_*
-*_Multi-Device Whatsapp BOT_*
-*_Recoded By EXCEL_*
-โโโโโโโโโโโโโโโโโโ
-
- โโโ โโโ โโโ โโโโ โโ
-โโโ โโโ โโโ โโโโ โโ
-โโโ โโโ โโโ โโโโ โโ
-โโโโโ โโโ
-โโโโโ โโโ
-โโโโโ โโโ
-
-โญโโโโโโโโโโโโโโโโโโฆฟ
-โย ย ๐ฐใ ๐๐๐๐ ใ๐ฐ
-โฐโฌโโโโโโโโโโโโโโโโโฆฟ
-โโค
-โ
-โ *_Developer_*: Excel Amadi
-โ *_Bot Name_*: ${botname}
-โ *_Mode_*: %mode
-โ *_HOST_*: I-CLOUDโ
-โ *_Type_*: LINUX
-โ *_Baileys_*: Multi Device
-โ *_Prefix_*: [ *%_p* ]
-โ *_Uptime_*: %muptime
-โ *_Database_*: %totalreg
-โ
-โฐโโโโโโโโโโโโโโโโโโโฆฟ
-โญโโโโโโโโโโโโโโโโโโโฆฟ
-โ ๐ฐใ ๐๐๐๐ ใ๐ฐ
-โฐโฌโโโโโโโโโโโโโโโโโโฆฟ
-โโค
-โ
-โ *_Name_*: %name
-โ *_Gold_*: %credit
-โ *_Role_*:
-โ *_Level_*: %level [ %xp4levelup Xp For Levelup]
-โ *_Xp_*: %exp / %maxexp
-โ *_Total Xp_*: %totalexp
-โ
-โฐโโโโโโโโโโโโโโโโโโโฆฟ
-โญโโโโโโโโโโโโโโโโโโโฆฟ
-โ ๐ฐใ ๐ฐ๐ต๐ญ๐ถ ๐ช๐ด๐ซ ใ๐ฐ
-โฐโฌโโโโโโโโโโโโโโโโโโฆฟ
-โโค
-โ *_%totalfeatures_* Commands
-โฐโโโโโโโโโโโโโโโโโโโฆฟ
-
+โญโโโใ๐๐๐ฐ๐-๐ผ๐ณ-๐
๐ธใโโโโ
+โโโ๐๐๐ด๐: *%name*
+โโโ๐ณ๐ด๐
: ๐ด๐๐ฒ๐ด๐ป
+โโโ๐ผ๐พ๐ณ๐ด: %mode
+โโโ๐ฟ๐ป๐ฐ๐๐ต๐พ๐๐ผ: %platform
+โโโ๐๐๐ฟ๐ด: ๐ฝ๐๐๐.๐๐
+โโโ๐ฑ๐ฐ๐ธ๐ป๐ด๐๐: ๐ผ๐๐๐๐๐๐๐๐๐๐
+โโโ๐ฟ๐๐ด๐ต๐ธ๐: [ *%_p* ]
+โโโ๐๐ฟ๐๐ธ๐ผ๐ด: %muptime
+โโโ๐ณ๐ฐ๐๐ฐ๐ฑ๐๐ด: *%totalreg*
+โโโ๐ฒ๐พ๐ผ๐ผ๐ฐ๐ฝ๐ณ๐: *%totalfeatures*
+โโโ๐๐ธ๐ผ๐ด: *%ucpn*
+โโโฐโโโโโโโโโโโโโ
+โฐโโโโโโโโโโโโโโโ
+ *๐ฑ|ยฉ๏ผณ๏ผด๏ผก๏ผฒ-๏ผญ๏ผค-๏ผถ๏ผ|๐ฑ*
+ %readmore
`.trimStart(),
- header: "โโโฆฟใ *_%category_* ใโฆฟ",
- body: "โโฌกโธ %cmd %isPremium %islimit",
- footer: "โฐโโโโโโโโโโโโโโโโโโฆฟ",
+ header: "โโโใ ```%category``` ใโ",
+ body: "โโป ```%cmd``` %isPremium %islimit",
+ footer: "โฐโโโโโโโโโโโโโโโโ",
after: "\n%me",
}
let handler = async (m, {
@@ -85,15 +46,15 @@ https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
}) => {
await conn.sendMessage(m.chat, {
react: {
- text: "๐ ",
+ text: "๐",
key: m.key,
}
})
-
+
let tags = {}
-
+
try {
-
+
/* Info Menu */
let glb = global.db.data.users
let usrs = glb[m.sender]
@@ -118,10 +79,10 @@ https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
let premium = glb[m.sender].premiumTime
let prems = `${premium > 0 ? "Premium": "Free"}`
let platform = os.platform()
-
-
+
+
let ucpn = `${ucapan()}`
-
+
let _uptime = process.uptime() * 1000
let _muptime
if (process.send) {
@@ -133,8 +94,8 @@ https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
}
let muptime = clockString(_muptime)
let uptime = clockString(_uptime)
-
-
+
+
let totalfeatures = Object.values(global.plugins).filter((v) => v.help && v.tags).length;
let totalreg = Object.keys(glb).length
let help = Object.values(global.plugins).filter(plugin => !plugin.disabled).map(plugin => {
@@ -208,11 +169,11 @@ https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
readmore: readMore
}
text = text.replace(new RegExp(`%(${Object.keys(replace).sort((a, b) => b.length - a.length).join`|`})`, "g"), (_, name) => "" + replace[name])
- const pp = './Assets/XLICON-V2.jpg'
-
-
+ const pp = './Assets/STAR-V2.jpg'
+
+
let contact = { key: { fromMe: false, participant: `${m.sender.split`@`[0]}@s.whatsapp.net`, ...(m.chat ? { remoteJid: '16504228206@s.whatsapp.net' } : {}) }, message: { contactMessage: { displayName: `${name}`, vcard: `BEGIN:VCARD\nVERSION:3.0\nN:;a,;;;\nFN:${name}\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`}}}
-
+
conn.sendMessage(m.chat, { video: { url: menuvid }, caption: text.trim(), gifPlayback: true,
gifAttribution: 0}, { quoted: contact })
@@ -222,26 +183,26 @@ https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
}
}
handler.command = /^(menu|help|\?)$/i
-
-
+
+
export default handler
-
-
+
+
function pickRandom(list) {
return list[Math.floor(Math.random() * list.length)]
}
-
+
const more = String.fromCharCode(8206)
const readMore = more.repeat(4001)
-
+
function clockString(ms) {
let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000)
let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
return [h, " H ", m, " M ", s, " S "].map(v => v.toString().padStart(2, 0)).join("")
}
-
+
function clockStringP(ms) {
let ye = isNaN(ms) ? "--" : Math.floor(ms / 31104000000) % 10
let mo = isNaN(ms) ? "--" : Math.floor(ms / 2592000000) % 12
@@ -251,21 +212,21 @@ https://whatsapp.com/channel/0029Va9wmuz8F2pGIURwmo0m
let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
return [ye, " *Years ๐๏ธ*\n", mo, " *Month ๐*\n", d, " *Days โ๏ธ*\n", h, " *Hours ๐*\n", m, " *Minute โฐ*\n", s, " *Second โฑ๏ธ*"].map(v => v.toString().padStart(2, 0)).join("")
}
-
+
function ucapan() {
- const time = moment.tz("Africa/Lagos").format("HH")
- let res = "Good morning โ๏ธ"
+ const time = moment.tz("Nigeria/Lagos").format("HH")
+ let res = "๐"
if (time >= 4) {
- res = "Good Morning ๐"
+ res = "โ๏ธ"
}
if (time >= 10) {
- res = "Good Afternoon โ๏ธ"
+ res = "โ๏ธ"
}
if (time >= 15) {
- res = "Good Afternoon ๐"
+ res = "๐"
}
if (time >= 18) {
- res = "Good Night ๐"
+ res = "๐"
}
return res
- }
+ }
\ No newline at end of file
diff --git a/plugins/main-menu2.js b/plugins/main-menu2.js
index 0bd526d5..0f25e52d 100644
--- a/plugins/main-menu2.js
+++ b/plugins/main-menu2.js
@@ -1,159 +1,256 @@
-import { createHash } from 'crypto'
-import PhoneNumber from 'awesome-phonenumber'
-import { canLevelUp, xpRange } from '../lib/levelling.js'
-import fetch from 'node-fetch'
-import fs from 'fs'
-const { levelling } = '../lib/levelling.js'
-import moment from 'moment-timezone'
-import { promises } from 'fs'
-import { join } from 'path'
-const time = moment.tz('Asia/Kolkata').format('HH')
-let wib = moment.tz('Asia/Kolkata').format('HH:mm:ss')
-//import db from '../lib/database.js'
-
-let handler = async (m, { conn, usedPrefix, command}) => {
- let d = new Date(new Date + 3600000)
- let locale = 'en'
- let week = d.toLocaleDateString(locale, { weekday: 'long' })
- let date = d.toLocaleDateString(locale, { day: 'numeric', month: 'long', year: 'numeric' })
- let _uptime = process.uptime() * 1000
- let uptime = clockString(_uptime)
-let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
-if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
-let pp = './Assets/XLICON-V2.jpg'
-let user = global.db.data.users[who]
-let { name, exp, diamond, lastclaim, registered, regTime, age, level, role, warn } = global.db.data.users[who]
-let { min, xp, max } = xpRange(user.level, global.multiplier)
-let username = conn.getName(who)
-let math = max - xp
-let prem = global.prems.includes(who.split`@`[0])
-let sn = createHash('md5').update(who).digest('hex')
-let totaluser = Object.values(global.db.data.users).length
-let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length
-let more = String.fromCharCode(8206)
-let readMore = more.repeat(850)
-let greeting = ucapan()
-let quote = quotes[Math.floor(Math.random() * quotes.length)];
-
-let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
-let str = `
-๐ *_Buckle up ${name}, ${greeting}! We're going on an adventure!_* ๐
-
-๐ *_Xlicon team quote of the day: ${quote}_* ๐
-
-โโโ๐ค _BOT STATUS:_๐คโโโ
-โ ๐ฎ *Founder:* Salman Ahmad
-โ ๐คก *Bot Name:* ${botname}
-โ ๐ป *Host:* Kali Linix
-โ ๐ฃ *Prefix:* ${usedPrefix}
-โ ๐ *Uptime:* ${uptime}
-โ ๐ *Database:* ${rtotalreg} of ${totaluser}
-โ ๐ *Total Users:* ${totaluser}
-โฐโโโโโโโโโโโโโโโโ
-
-โโโโฐ _Today's Sauce!_ โฐโโ
-โ ๐ *Today's Date:* ${date}
-โ โฒ๏ธ *Current Time:* ${wib}
-โฐโโโโโโโโโโโโโโโโ
-
-โโ๐ _User Info:_ ๐โโ
-โ ๐พ *User Tag:* ${taguser}
-โ ๐ *Name:* ${name}
-โ ๐ *Master Mind:* ${author}
-โ ๐ *Diamonds:* ${diamond}
-โ ๐ *Rank:* ${role}
-โ ๐ฎ *XP:* ${exp}
-โฐโโโโโโโโโโโโโโโโ
-๐ *_If You need help, Just do this, use ${usedPrefix}list or ${usedPrefix}help2. And enjoy!_* ๐
-`
-
-
- conn.sendFile(m.chat, pp, 'perfil.jpg', str, m, null, rpyt)
- m.react(done)
-
-}
-handler.help = ['main']
-handler.tags = ['group']
-handler.command = ['menu2', 'help2']
-
-export default handler
-function clockString(ms) {
- let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000)
- let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60
- let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60
- return [h, m, s].map(v => v.toString().padStart(2, 0)).join(':')}
-
- function ucapan() {
- const time = moment.tz('Asia/Kolkata').format('HH')
- let res = "happy early in the dayโ๏ธ"
- if (time >= 4) {
- res = "Good Morning ๐"
- }
- if (time >= 10) {
- res = "Good Afternoon โ๏ธ"
- }
- if (time >= 15) {
- res = "Good Afternoon ๐"
- }
- if (time >= 18) {
- res = "Good Night ๐"
- }
- return res
- }
- const quotes = [
- "I'm not lazy, I'm just on my energy saving mode.",
- "Life is short, smile while you still have teeth.",
- "I may be a bad influence, but darn I am fun!",
- "I'm on a whiskey diet. I've lost three days already.",
- "Why don't some couples go to the gym? Because some relationships don't work out.",
- "I told my wife she should embrace her mistakes... She gave me a hug.",
- "I'm great at multitasking. I can waste time, be unproductive, and procrastinate all at once.",
- "You know you're getting old when you stoop to tie your shoelaces and wonder what else you could do while you're down there.",
- "I'm so good at sleeping, I can do it with my eyes closed.",
- "If you think nobody cares if youโre alive, try missing a couple of payments.",
- "I used to think I was indecisive, but now I'm not so sure.",
- "If you can't convince them, confuse them.",
- "I told my wife she was drawing her eyebrows too high. She looked surprised.",
- "I'm not clumsy, I'm just on a mission to test gravity.",
- "I told my wife she should do more push-ups. She said, 'I could do a hundred!' So I counted to ten and stopped.",
- "Life is like a box of chocolates; it doesn't last long if you're hungry.",
- "I'm not saying I'm Wonder Woman, I'm just saying no one has ever seen me and Wonder Woman in the same room together.",
- "Why do they call it beauty sleep when you wake up looking like a troll?",
- "I don't always lose my phone, but when I do, it's always on silent.",
- "My bed is a magical place where I suddenly remember everything I was supposed to do.",
- "I love the sound you make when you shut up.",
- "I'm not arguing, I'm just explaining why I'm right.",
- "I'm not a complete idiot, some parts are missing.",
- "When life gives you lemons, squirt someone in the eye.",
- "I don't need anger management. You just need to stop making me angry.",
- "I'm not saying I'm Batman. I'm just saying no one has ever seen me and Batman in the same room together.",
- "I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
- "I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
- "I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together.",
- "The early bird can have the worm because worms are gross and mornings are stupid.",
- "If life gives you lemons, make lemonade. Then find someone whose life has given them vodka and have a party!",
- "The road to success is always under construction.",
- "I am so clever that sometimes I don't understand a single word of what I am saying.",
- "Some people just need a high-five. In the face. With a chair.",
- "I'm not saying I'm perfect, but I'm pretty close.",
- "A day without sunshine is like, you know, night.",
- "The best way to predict the future is to create it.",
- "If you can't be a good example, then you'll just have to be a horrible warning.",
- "I don't know why I keep hitting the escape button. I'm just trying to get out of here.",
- "I'm not lazy. I'm on energy-saving mode.",
- "I don't need a hairstylist, my pillow gives me a new hairstyle every morning.",
- "I don't have a bad handwriting, I have my own font.",
- "I'm not clumsy. It's just the floor hates me, the table and chairs are bullies, and the walls get in my way.",
- "I'm not saying I'm Batman. I'm just saying no one has ever seen me and Batman in the same room together.",
- "I'm not saying I'm Wonder Woman. I'm just saying no one has ever seen me and Wonder Woman in the same room together.",
- "I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
- "I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
- "I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together.",
- "เคตเคเฅเคค เคนเคฎเฅ เคฌเคนเฅเคค เคเฅเค เคธเคฟเคเคพ เคฆเฅเคคเคพ เคนเฅ, เคเคพเคธเคเคฐ เคคเคฌ เคเคฌ เคนเคฎเคพเคฐเฅ เคชเคพเคธ เคตเคเฅเคค เคจเคนเฅเค เคนเฅเคคเคพเฅค",
- "เคเคฟเคเคฆเคเฅ เคเค เคเคฟเคคเคพเคฌ เคเฅ เคคเคฐเคน เคนเฅเคคเฅ เคนเฅ, เคนเคฐ เคฆเคฟเคจ เคจเคฏเคพ เคชเคจเฅเคจเคพ เคฌเคฆเคฒเคคเคพ เคนเฅเฅค เคเคญเฅ เคนเคเคธเคคเฅ เคนเฅเค, เคเคญเฅ เคฐเฅเคคเฅ เคนเฅเค, เคชเคฐ เคนเคฐ เคเคฟเคธเฅ เคเฅ เคเคนเคพเคจเฅ เค
เคงเฅเคฐเฅ เคนเฅเคคเฅ เคนเฅ!",
- "เคชเคขเคผเคพเค เคเคฐเฅ เคคเฅ เคฆเคฟเคฒ เคฒเคเคคเคพ เคจเคนเฅ, เคฆเคฟเคฒ เคฒเคเคพเค เคคเฅ เคฆเคฟเคฎเคพเคเคผ เคฒเคเคคเคพ เคจเคนเฅเคเฅค",
- "เคฆเฅเคธเฅเคคเฅ เคเคคเคจเฅ เคเคนเคฐเฅ เคเคฐเฅ เคเฅ เคฆเคฟเคฒ เคฎเฅเค เคฌเคธ เคเคพเค, เคเคธเฅ เคฆเฅเคธเฅเคคเฅ เคจเคฟเคญเคพเค เคเฅ เคนเคฎเฅ เคญเฅ เคคเฅเคฎเฅเคนเคพเคฐเฅ เคฆเฅเคธเฅเคค เคนเฅเคจเฅ เคชเคฐ เคจเคพเค เคนเฅเฅค",
- "เคฎเฅเคฐเฅ เคฆเฅเคธเฅเคค เคคเฅเคฎ เคฌเคนเฅเคค เคฏเคพเคฆ เคเคคเฅ เคนเฅ, เคเคฌ เคญเฅ เคญเฅเค เคฒเคเคคเฅ เคนเฅ เคตเฅ เคธเคฎเฅเคธเฅ เคฌเคนเฅเคค เคฏเคพเคฆ เคเคคเฅ เคนเฅเฅค",
- "เคเฅเคตเคจ เคเคพ เค
เคธเคฒเฅ เคฎเคเคผเคพ เคคเฅ เคคเคฌ เคเคคเคพ เคนเฅ, เคเคฌ เคฆเฅเคธเคฐเฅ เคเคชเคเฅ เคเคผเคฟเคเคฆเคเฅ เคเฅเคจเฅ เคเฅ เคเฅเคถเคฟเคถ เคเคฐเคคเฅ เคนเฅเคเฅค",
- "เคเฅเค เคฒเฅเค เคคเฅ เคเคคเคจเฅ เคซเคพเคฒเคคเฅ เคนเฅเคคเฅ เคนเฅเค, เคเฅเคฆ เคเฅ เคเคผเคฟเคเคฆเคเฅ เคเฅเคฆ เคนเฅ เคจเคนเฅเค เคเฅ เคชเคพเคคเฅ เคเคฐ เคฆเฅเคธเคฐเฅเค เคเฅ เคเคผเคฟเคเคฆเคเฅ เคฎเฅเค เคเคพเคเค เค
เคกเคผเคพ เคฆเฅเคคเฅ เคนเฅเคเฅค"
-];
+import {
+ promises,
+ readFileSync
+ } from "fs"
+ import {
+ join
+ } from "path"
+ import {
+ xpRange
+ } from "../lib/levelling.js"
+ import moment from "moment-timezone"
+ import os from "os"
+ import fs from "fs"
+ import fetch from "node-fetch"
+
+ const defaultMenu = {
+ before: `
+โโโโโใ ๐๐๐ฅ๐
ใโโโโโโ
+โ
+โโโ โโโ โโโ โโโ
+โโโ โโโ โโโ โโโ
+โ
+โโโโโโ โโโ โโ โโโ โโโ
+โโโโโโ โโโ โโ โโโ โโโ
+โยฉแฌะฅแแฌแ แชแทแชแ แ
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใแดฯดอฒ-แฮอฒแฌแใโ
+โโ_แ แฌแ_:-แฌะฅแแฌแ แชแทแชแ แ
+โโ_แดฯดอฒ ฮแชแทแฌ_ :ีอฒแชแก-แทแ -แ2
+โโ_แทฯดแ แฌ_: %mode
+โโ_แปฯดีอฒ_: แแฮแฎะฅ-แแชแแก
+โโ_อฒแฝแขแฌ_: แชIแแแญ
+โโ_แดแชแแแฌแฝี_:แฐแแชTI-แชแดแฏIแแด
+โโ_แขแกแฌาแะฅ_: [ *%_p* ]
+โโ_แฎแขอฒแแทแฌ_: %muptime
+โโ_แ แชอฒแชแดแชีแฌ_: %totalreg
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใแฎีแฌแกใโ
+โ โ_ฮแชแทแฌ_: %name
+โ โ_แฯดแแ _: %credit
+โ โ_แแฌแแฌแ_: [-1000xp to leveup]
+โ โ_ะฅแข_: %exp / %maxexp
+โ โ_อฒฯดอฒแชแ ะฅแข_: %totalexp
+โยฉีTแฉแ-แฐแช-แฏ2
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใแฮอฒแฌแ-แฯดแกแฌ ใโ
+โโCores: 8
+โโThreads:16
+โโBase Clock Speed: 3.8 GHz
+โโMax Turbo Boost Speed:5.1 โGHz
+โโCache:16 MB Intel Smart โCache
+โโLithography: 14 nm
+โโTDP (Thermal Design โPower): 125 W
+โโSocket: LGA 1200
+โโMemory Support: โDDR4-2933
+โโIntegrated Graphics: Intel โUHD Graphics 630
+โโTotal Commands:-*_%totalfeatures_*
+โฐโโโโโโโโโโโโโโโโโโ
+ `.trimStart(),
+ header: "โโโใ *_%category_* ใโ",
+ body: "โโ%cmd %isPremium %islimit",
+ footer: "โฐโโโโโโโโโโโโโโโโโโ",
+ after: "\n%me",
+ }
+ let handler = async (m, {
+ conn,
+ usedPrefix: _p,
+ __dirname,
+ args
+ }) => {
+ await conn.sendMessage(m.chat, {
+ react: {
+ text: "โคต๏ธ",
+ key: m.key,
+ }
+ })
+
+ let tags = {}
+
+ try {
+
+ /* Info Menu */
+ let glb = global.db.data.users
+ let usrs = glb[m.sender]
+ let tag = `@${m.sender.split("@")[0]}`
+ let mode = process.env.MODE || (global.opts["self"] ? "Private" : "Public");
+ let _package = JSON.parse(await promises.readFile(join(__dirname, "../package.json")).catch(_ => ({}))) || {}
+ let {
+ age,
+ exp,
+ limit,
+ level,
+ role,
+ registered,
+ credit
+ } = glb[m.sender]
+ let {
+ min,
+ xp,
+ max
+ } = xpRange(level, global.multiplier)
+ let name = await conn.getName(m.sender)
+ let premium = glb[m.sender].premiumTime
+ let prems = `${premium > 0 ? "Premium": "Free"}`
+ let platform = os.platform()
+
+
+ let ucpn = `${ucapan()}`
+
+ let _uptime = process.uptime() * 1000
+ let _muptime
+ if (process.send) {
+ process.send("uptime")
+ _muptime = await new Promise(resolve => {
+ process.once("message", resolve)
+ setTimeout(resolve, 1000)
+ }) * 1000
+ }
+ let muptime = clockString(_muptime)
+ let uptime = clockString(_uptime)
+
+
+ let totalfeatures = Object.values(global.plugins).filter((v) => v.help && v.tags).length;
+ let totalreg = Object.keys(glb).length
+ let help = Object.values(global.plugins).filter(plugin => !plugin.disabled).map(plugin => {
+ return {
+ help: Array.isArray(plugin.tags) ? plugin.help : [plugin.help],
+ tags: Array.isArray(plugin.tags) ? plugin.tags : [plugin.tags],
+ prefix: "customPrefix" in plugin,
+ limit: plugin.limit,
+ premium: plugin.premium,
+ enabled: !plugin.disabled,
+ }
+ })
+ for (let plugin of help)
+ if (plugin && "tags" in plugin)
+ for (let tag of plugin.tags)
+ if (!(tag in tags) && tag) tags[tag] = tag
+ conn.menu = conn.menu ? conn.menu : {}
+ let before = conn.menu.before || defaultMenu.before
+ let header = conn.menu.header || defaultMenu.header
+ let body = conn.menu.body || defaultMenu.body
+ let footer = conn.menu.footer || defaultMenu.footer
+ let after = conn.menu.after || (conn.user.jid == global.conn.user.jid ? "" : `Powered by https://wa.me/${global.conn.user.jid.split`@`[0]}`) + defaultMenu.after
+ let _text = [
+ before,
+ ...Object.keys(tags).map(tag => {
+ return header.replace(/%category/g, tags[tag]) + "\n" + [
+ ...help.filter(menu => menu.tags && menu.tags.includes(tag) && menu.help).map(menu => {
+ return menu.help.map(help => {
+ return body.replace(/%cmd/g, menu.prefix ? help : "%_p" + help)
+ .replace(/%islimit/g, menu.limit ? "โ" : "")
+ .replace(/%isPremium/g, menu.premium ? "๐
" : "")
+ .trim()
+ }).join("\n")
+ }),
+ footer
+ ].join("\n")
+ }),
+ after
+ ].join("\n")
+ let text = typeof conn.menu == "string" ? conn.menu : typeof conn.menu == "object" ? _text : ""
+ let replace = {
+ "%": "%",
+ p: _p,
+ uptime,
+ muptime,
+ me: conn.getName(conn.user.jid),
+ npmname: _package.name,
+ npmdesc: _package.description,
+ version: _package.version,
+ exp: exp - min,
+ maxexp: xp,
+ totalexp: exp,
+ xp4levelup: max - exp,
+ github: _package.homepage ? _package.homepage.url || _package.homepage : "[unknown github url]",
+ tag,
+ ucpn,
+ platform,
+ mode,
+ _p,
+ credit,
+ age,
+ tag,
+ name,
+ prems,
+ level,
+ limit,
+ name,
+ totalreg,
+ totalfeatures,
+ role,
+ readmore: readMore
+ }
+ text = text.replace(new RegExp(`%(${Object.keys(replace).sort((a, b) => b.length - a.length).join`|`})`, "g"), (_, name) => "" + replace[name])
+ const pp = './Assets/STAR-V2.jpg'
+
+
+ let contact = { key: { fromMe: false, participant: `${m.sender.split`@`[0]}@s.whatsapp.net`, ...(m.chat ? { remoteJid: '16504228206@s.whatsapp.net' } : {}) }, message: { contactMessage: { displayName: `${name}`, vcard: `BEGIN:VCARD\nVERSION:3.0\nN:;a,;;;\nFN:${name}\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`}}}
+
+ conn.sendMessage(m.chat, { video: { url: menuvid }, caption: text.trim(), gifPlayback: true,
+ gifAttribution: 0}, { quoted: contact })
+
+ } catch (e) {
+ await conn.reply(m.chat, " error", m)
+ throw e
+ }
+ }
+ handler.command = /^(oldmenu|menu2|\?)$/i
+
+
+
+ export default handler
+
+
+ function pickRandom(list) {
+ return list[Math.floor(Math.random() * list.length)]
+ }
+
+ const more = String.fromCharCode(8206)
+ const readMore = more.repeat(4001)
+
+ function clockString(ms) {
+ let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000)
+ let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
+ return [h, " H ", m, " M ", s, " S "].map(v => v.toString().padStart(2, 0)).join("")
+ }
+
+ function clockStringP(ms) {
+ let ye = isNaN(ms) ? "--" : Math.floor(ms / 31104000000) % 10
+ let mo = isNaN(ms) ? "--" : Math.floor(ms / 2592000000) % 12
+ let d = isNaN(ms) ? "--" : Math.floor(ms / 86400000) % 30
+ let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000) % 24
+ let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
+ return [ye, " *Years ๐๏ธ*\n", mo, " *Month ๐*\n", d, " *Days โ๏ธ*\n", h, " *Hours ๐*\n", m, " *Minute โฐ*\n", s, " *Second โฑ๏ธ*"].map(v => v.toString().padStart(2, 0)).join("")
+ }
+
+ function ucapan() {
+ const time = moment.tz("Asia/Kolkata").format("HH")
+ let res = "Good morning โ๏ธ"
+ if (time >= 4) {
+ res = "Good Morning ๐"
+ }
+ if (time >= 10) {
+ res = "Good Afternoon โ๏ธ"
+ }
+ if (time >= 15) {
+ res = "Good Afternoon ๐"
+ }
+ if (time >= 18) {
+ res = "Good Night ๐"
+ }
+ return res
+ }
\ No newline at end of file
diff --git a/plugins/main-menu3.js b/plugins/main-menu3.js
index 832d0ece..aec27d4f 100644
--- a/plugins/main-menu3.js
+++ b/plugins/main-menu3.js
@@ -7,7 +7,7 @@ const { levelling } = '../lib/levelling.js'
import moment from 'moment-timezone'
import { promises } from 'fs'
import { join } from 'path'
-const time = moment.tz('Africa/Lagos').format('HH')
+const time = moment.tz('Asia/Karachi').format('HH')
let wib = moment.tz('Asia/Karachi').format('HH:mm:ss')
//import db from '../lib/database.js'
@@ -36,7 +36,7 @@ let greeting = ucapan()
let quote = quotes[Math.floor(Math.random() * quotes.length)];
let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
-let str = ` *๐ STAR-V2 BOT๐ *
+let str = ` *๐ก STAR -V2 BOT๐ก*
โญโฆโญโญโญโ
โช MENU-3 โชโ
โญโญโญโ
@@ -54,7 +54,7 @@ let str = ` *๐ STAR-V2 BOT๐ *
โ๐ฉ โฆโโซ - ใ${usedPrefix}๐๐ฐ๐จ๐ฐ๐ฎ๐ฆ๐ฏ๐ถ
โ *${usedPrefix}list าแดส แดแดแดแดแดษดแด
s สษชsแด*
โ *${greeting}*
-โ *MADE BY EXCEL*
+โ *MADE BY Excel*
โฐโโโโโโโโโโโโโโโโโโโฏ
๐ *_Quote of the day: ${quote}_* ๐
`
@@ -76,7 +76,7 @@ function clockString(ms) {
return [h, m, s].map(v => v.toString().padStart(2, 0)).join(':')}
function ucapan() {
- const time = moment.tz('Africa/Lagoa').format('HH')
+ const time = moment.tz('Asia/Karachi').format('HH')
let res = "happy early in the dayโ๏ธ"
if (time >= 4) {
res = "Good Morning ๐"
@@ -141,4 +141,4 @@ function clockString(ms) {
"I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
"I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
"I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together."
-];
+];
\ No newline at end of file
diff --git a/plugins/main-menu4.js b/plugins/main-menu4.js
index a2e7c084..91237e05 100644
--- a/plugins/main-menu4.js
+++ b/plugins/main-menu4.js
@@ -11,7 +11,7 @@ import {
import moment from "moment-timezone"
import os from "os"
-
+
let groupmenu = `
โฆ โโโใ *group* ใโโโ โ
โซ .getbio <@tag/reply> โ
@@ -42,7 +42,7 @@ import {
โซ .warns
โซ .main
โฐโโโโโโโโโโโณน`
-
+
let ownermenu = `
โฆ โโโใ *owner* ใโโโ โ
โ .addprem <@tag>
@@ -74,7 +74,7 @@ import {
โ .listban
โ .deleteplugin
โฐโโโโโโโโโโโณน`
-
+
let funmenu = `
โฆ โโโใ *fun* ใโโโ โ
โ .afk
@@ -96,7 +96,7 @@ import {
โ .meme
โ .quote
โฐโโโโโโโโโโโณน`
-
+
let reactmenu = `
โฆ โโโใ *reaction* ใโโโ โ
โ .bully @tag
@@ -126,7 +126,7 @@ import {
โ .dance @tag
โ .cringe @tag
โฐโโโโโโโโโโโณน`
-
+
let dlmenu = `
โฆ โโโใ *downloader* ใโโโ โ
โ .facebook
@@ -149,7 +149,7 @@ import {
โ .ytmp4
โ .wallpaper
โฐโโโโโโโโโโโณน`
-
+
let gamemenu = `
โฆ โโโใ *game* ใโโโ โ
โ .slot
@@ -189,7 +189,7 @@ import {
โ .lolicon
โ .ytcomment
โฐโโโโโโโโโโโณน`
-
+
let stickermenu = `
โฆ โโโใ *sticker* ใโโโ โ
โ .emojimix
@@ -212,7 +212,7 @@ import {
โ .attp3
โ .take |
โฐโโโโโโโโโโโณน`
-
+
let audiomenu = `
โฆ โโโใ *audio* ใโโโ โ
โ .bass [vn]
@@ -228,8 +228,8 @@ import {
โ .smooth [vn]
โ .tupai [vn]
โฐโโโโโโโโโโโณน`
-
-
+
+
let newsmenu = `
โฆ โโโใ *news* ใโโโ โ
โ .news
@@ -387,7 +387,7 @@ import {
โ .xvid
โ .xnxx
โฐโโโโโโโโโโโณน`
-
+
let toolsmenu = `
โฆ โโโใ *tools* ใโโโ โ
โ .nowa
@@ -427,7 +427,7 @@ import {
โ .wa
โ .wikipedia
โฐโโโโโโโโโโโณน`
-
+
let Aimenu = `
โฆ โโโใ *AI* ใโโโ โ
โ .bing
@@ -446,7 +446,7 @@ import {
โ .plugins
โ .install
โฐโโโโโโโโโโโณน`
-
+
let botmenu = `
โฆ โโโใ *Bot Menu* ใโโโ โ
โ .ping
@@ -484,13 +484,13 @@ import {
args,
usedPrefix
}) => {
-
-
+
+
let glb = global.db.data.users
let usrs = glb[m.sender]
let tag = `@${m.sender.split("@")[0]}`
let mode = global.opts["self"] ? "Private" : "Public"
-
+
let {
age,
exp,
@@ -509,10 +509,10 @@ import {
let premium = glb[m.sender].premiumTime
let prems = `${premium > 0 ? "Premium": "Free"}`
let platform = os.platform()
-
-
+
+
let ucpn = `${ucapan()}`
-
+
let _uptime = process.uptime() * 1000
let _muptime
if (process.send) {
@@ -524,20 +524,20 @@ import {
}
let muptime = clockString(_muptime)
let uptime = clockString(_uptime)
-
-
+
+
let totalfeatures = Object.values(global.plugins).filter((v) => v.help && v.tags).length;
let totalreg = Object.keys(glb).length
-
+
conn.gurumenu = conn.gurumenu ? conn.gurumenu : {};
-
-
+
+
global.fcontact = { key: { fromMe: false, participant: `0@s.whatsapp.net`, remoteJid: 'status@broadcast' }, message: { contactMessage: { displayName: `${name}`, vcard: `BEGIN:VCARD\nVERSION:3.0\nN:;a,;;;\nFN:${name}\nitem1.TEL;waid=${m.sender.split('@')[0]}:${m.sender.split('@')[0]}\nitem1.X-ABLabel:Ponsel\nEND:VCARD`}}}
const infoText = `
- ใ ${botname} MD ใ\n
+ ใSTAR-MD-V2 ใ\n
โโโ
โ *_Hi_* ๐
- โโฌโ *_${name}_* STAR๐
+ โโฌโ *_${name}_* Senpai
โโคโ *${ucpn}* ๐
โโโโโโโโโโโโโโโ โณน
โ
@@ -545,8 +545,8 @@ import {
โ๐๐๐ : ${botname}
โ๐๐จ๐๐ : ${mode}
โ๐๐ฅ๐๐ญ๐๐จ๐ซ๐ฆ : ${platform}
- โ๐๐จ๐ฌ๐ญ : I-CLOUD
- โ๐๐ฒ๐ฉ๐ : LINUX
+ โ๐๐จ๐ฌ๐ญ : ๐๐ฆ๐ซ๐ฒ๐ต ๐๐๐๐
+ โ๐๐ฒ๐ฉ๐ : NodeJs
โ๐๐๐ข๐ฅ๐๐ฒ๐ฌ : Multi Device
โ๐๐ซ๐๐๐ข๐ฑ : [ *${usedPrefix}* ]
โ๐๐ฉ๐๐๐ : 0.00001 miliseconds
@@ -559,7 +559,7 @@ import {
โ๐๐จ๐ฅ๐ : ${role}
โ๐๐๐ฏ๐๐ฅ : ${level}
โ๐๐ฉ : ${exp}
- โ
+ โ๐๐ฆ๐ท๐ฆ๐ญ๐ฐ๐ฑ๐ฆ๐ณ:-๐๐ฑ๐๐๐ฅ
โโ ๐๐๐๐ ๐พ๐๐ฟ
โ *${totalfeatures}* Commands
โ
@@ -592,10 +592,10 @@ import {
${readMore}`
;
-
+
const { result, key, timeout } = await conn.sendMessage(m.chat, { video: { url: menuvid }, caption: infoText.trim(), gifPlayback: true,
gifAttribution: 0}, { quoted: fcontact })
-
+
// Save the menu options to gurumenu
conn.gurumenu[m.sender] = {
result,
@@ -608,17 +608,17 @@ import {
}, 60 * 1000),
};
};
-
-
+
+
handler.before = async (m, { conn }) => {
conn.gurumenu = conn.gurumenu ? conn.gurumenu : {};
if (m.isBaileys || !(m.sender in conn.gurumenu)) return;
const { result, key, timeout } = conn.gurumenu[m.sender];
if (!m.quoted || m.quoted.id !== key.id || !m.text) return;
const choice = m.text.trim();
-
+
if (choice === "1") {
- await conn.sendMessage(m.chat, { image: { url:'https://telegra.ph/file/f2fa9732e0e26bbb0bfb0.jpg' },
+ await conn.sendMessage(m.chat, { image: { url: 'https://i.imgur.com/LIuTHZK.jpeg' },
caption: botmenu
}, { quoted:fcontact });
} else if (choice === "2") {
@@ -634,7 +634,7 @@ import {
caption: funmenu
}, { quoted:fcontact });
} else if (choice === "5") {
- await conn.sendMessage(m.chat, { image: {'url:'https://telegra.ph/file/f2fa9732e0e26bbb0bfb0.jpg' },
+ await conn.sendMessage(m.chat, { image: { url: 'https://telegra.ph/file/f2fa9732e0e26bbb0bfb0.jpg' },
caption: reactmenu
}, { quoted:fcontact });
} else if (choice === "6") {
@@ -692,33 +692,33 @@ import {
} else {
m.reply('Invalid choice. Please reply with a valid number.');
}
-
+
};
-
-
+
+
handler.help = ["play"];
handler.tags = ["downloader"];
handler.command = /^(menu4)$/i;
handler.limit = true;
export default handler;
-
-
-
-
+
+
+
+
function pickRandom(list) {
return list[Math.floor(Math.random() * list.length)]
}
-
+
const more = String.fromCharCode(8206)
const readMore = more.repeat(4001)
-
+
function clockString(ms) {
let h = isNaN(ms) ? "--" : Math.floor(ms / 3600000)
let m = isNaN(ms) ? "--" : Math.floor(ms / 60000) % 60
let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
return [h, " H ", m, " M ", s, " S "].map(v => v.toString().padStart(2, 0)).join("")
}
-
+
function clockStringP(ms) {
let ye = isNaN(ms) ? "--" : Math.floor(ms / 31104000000) % 10
let mo = isNaN(ms) ? "--" : Math.floor(ms / 2592000000) % 12
@@ -728,9 +728,9 @@ import {
let s = isNaN(ms) ? "--" : Math.floor(ms / 1000) % 60
return [ye, " *Years ๐๏ธ*\n", mo, " *Month ๐*\n", d, " *Days โ๏ธ*\n", h, " *Hours ๐*\n", m, " *Minute โฐ*\n", s, " *Second โฑ๏ธ*"].map(v => v.toString().padStart(2, 0)).join("")
}
-
+
function ucapan() {
- const time = moment.tz("Africa/Lagos").format("HH")
+ const time = moment.tz("Asia/Kolkata").format("HH")
let res = "Good morning โ๏ธ"
if (time >= 4) {
res = "Good Morning ๐"
@@ -745,5 +745,4 @@ import {
res = "Good Night ๐"
}
return res
- }
-
+ }
\ No newline at end of file
diff --git a/plugins/main-runtime.js b/plugins/main-runtime.js
index 75432600..48fba103 100644
--- a/plugins/main-runtime.js
+++ b/plugins/main-runtime.js
@@ -10,9 +10,9 @@ let handler = async (m, { conn, args, usedPrefix, command }) => {
}) * 1000
}
let muptime = clockString(_muptime)
- m.reply(`๐ฎ *Bot active duration* \n\n${muptime}`)
+ m.reply(`๐ฑ *Bot active duration* ๐ฑ \n\n${muptime}`)
}
-handler.help = ['runtime']
+handler.help = ['runtime','uptime']
handler.tags = ['main']
handler.command = ['runtime', 'uptime']
export default handler
diff --git a/plugins/main-script.js b/plugins/main-script.js
index 033e7f52..1c677303 100644
--- a/plugins/main-script.js
+++ b/plugins/main-script.js
@@ -15,17 +15,19 @@ let handler = async function (m, { conn, __dirname }) {
const repoData = response.data;
// Format the repository information with emojis
- const formattedInfo = `
-โญโญโญโญโ
โช *STAR-MD-V2* โชโ
โญโญโญ
-โ ๐ *BOT Name:* _${repoData.name}_
-โ ๐ *Description:* _${repoData.description}_
-โ ๐ค *Owner:* _EXCEL AMADI_
-โ โญ *Stars:* _${repoData.stargazers_count}_
- ๐ก *ScanQR:*https://session.guruapi.tech/
-โ ๐ด *Forks:* _${repoData.forks_count}_
-โ ๐ *URL:* ${repoData.html_url}
-โฐโโโโโโโโโโโโโโโโโโฏ
- `.trim();
+ const formattedInfo = `
+ โโโโใ ๐๐๐๐-๐๐-๐๐ ใโโโโท
+
+๐ค ๐๐๐-๐๐๐๐: _${repoData.name}_
+๐ ๐๐๐ฌ๐๐ซ๐ข๐ฉ๐ญ๐ข๐จ๐ง: A bot Multidevice Bot with tons of functions
+๐ค ๐๐๐: _EXCEL AMADI_
+โญ ๐๐๐๐๐: _${repoData.stargazers_count}_
+๐ฒ ๐๐๐๐ ๐๐๐๐: https://replit.com/@Xcelsama/STAR-BOT-PAIRr?s=app
+๐ด ๐
๐๐๐๐: _${repoData.forks_count}_
+๐ป ๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐: https://whatsapp.com/channel/0029VaBcXo4JJhzW9c1uVD2X
+๐ ๐๐๐: ${repoData.html_url}
+
+ `.trim();
// Send the formatted information as a message
await conn.relayMessage(m.chat, {
diff --git a/plugins/manhwa-js b/plugins/manhwa-js
new file mode 100644
index 00000000..b24bc903
--- /dev/null
+++ b/plugins/manhwa-js
@@ -0,0 +1,46 @@
+import fetch from 'node-fetch'
+
+let handler = async (m, { conn, text }) => {
+ if (!text) throw 'Please provide manhwa name to search for.'
+ let query = encodeURIComponent(text)
+
+ const url = `https://asura.guruapi.tech/asura/search?name=${query}`
+
+ const response = await fetch(url)
+ const json = await response.json()
+
+ if (!response.ok) {
+ throw `An error occurred: ${json.error}`
+ }
+
+ let link = json.data[0].link
+
+ const url2 = `https://asura.guruapi.tech/asura/details?url=${link}`
+
+ let response2 = await fetch(url2)
+ let json2 = await response2.json()
+
+ if (!response2.ok) {
+ throw `An error occurred: ${json2.error}`
+ }
+ let lastEpisodeUrl = 'N/A'
+
+ if (json2.data.urls && json2.data.urls.length > 0) {
+ lastEpisodeUrl = json2.data.urls[json2.data.urls.length - 1]
+ }
+
+ let message = `Name: ${json2.data.title}\n\nDescription: ${json2.data.description}\n\nGenre: ${json2.data.genre}\n\nStatus: ${json2.data.status}\n\nLast Episode: ${lastEpisodeUrl}\n`
+
+ let thumb = json.data[0].image
+
+ await conn.sendMessage(m.chat, {
+ image: { url: thumb },
+ caption: message,
+ })
+}
+
+handler.help = ['manhwa']
+handler.tags = ['anime']
+handler.command = /^manhwa/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/math-game.js b/plugins/math-game.js
new file mode 100644
index 00000000..a3230468
--- /dev/null
+++ b/plugins/math-game.js
@@ -0,0 +1,95 @@
+let handler = async (m, { conn, args, usedPrefix, command }) => {
+ conn.math = conn.math ? conn.math : {}
+
+ if (args.length < 1)
+ throw `
+ ๐งฎ available difficulties :
+
+${Object.keys(modes).join(' | ')}
+
+_๐Example : ${usedPrefix + command} normal_
+`.trim()
+ let mode = args[0].toLowerCase()
+ if (!(mode in modes))
+ throw `
+ ๐งฎ available difficulties :
+
+ ${Object.keys(modes).join(' | ')}
+
+_๐Example : ${usedPrefix + command} normal_
+`.trim()
+
+ let id = m.chat
+ if (id in conn.math)
+ return conn.reply(
+ m.chat,
+ 'โ ๏ธ There are still unanswered questions in this chat',
+ conn.math[id][0]
+ )
+ let math = genMath(mode)
+ conn.math[id] = [
+ await conn.reply(
+ m.chat,
+ `โข HOW MUCH IS IT *${math.str}*=\n\n_Time:_ ${(math.time / 1000).toFixed(2)} seconds\n\n๐ Reward : ${math.bonus} XP`,
+ m
+ ),
+ math,
+ 4,
+ setTimeout(() => {
+ if (conn.math[id])
+ conn.reply(m.chat, `โณ Time is over!\nThe answer is : *${math.result}*`, conn.math[id][0])
+ delete conn.math[id]
+ }, math.time),
+ ]
+}
+handler.help = ['Maths ']
+handler.tags = ['game']
+handler.command = ['maths', 'math', 'matemรกticas', 'ganit']
+
+let modes = {
+ noob: [-3, 3, -3, 3, '+-', 15000, 10],
+ easy: [-10, 10, -10, 10, '*/+-', 20000, 40],
+ normal: [-40, 40, -20, 20, '*/+-', 40000, 150],
+ hard: [-100, 100, -70, 70, '*/+-', 60000, 350],
+ extreme: [-999999, 999999, -999999, 999999, '*/', 99999, 9999],
+ impossible: [-99999999999, 99999999999, -99999999999, 999999999999, '*/', 30000, 35000],
+ impossible2: [-999999999999999, 999999999999999, -999, 999, '/', 30000, 50000],
+}
+
+let operators = {
+ '+': '+',
+ '-': '-',
+ '*': 'ร',
+ '/': 'รท',
+}
+
+function genMath(mode) {
+ let [a1, a2, b1, b2, ops, time, bonus] = modes[mode]
+ let a = randomInt(a1, a2)
+ let b = randomInt(b1, b2)
+ let op = pickRandom([...ops])
+ let result = new Function(`return ${a} ${op.replace('/', '*')} ${b < 0 ? `(${b})` : b}`)()
+ if (op == '/') [a, result] = [result, a]
+ return {
+ str: `${a} ${operators[op]} ${b}`,
+ mode,
+ time,
+ bonus,
+ result,
+ }
+}
+
+function randomInt(from, to) {
+ if (from > to) [from, to] = [to, from]
+ from = Math.floor(from)
+ to = Math.floor(to)
+ return Math.floor((to - from) * Math.random() + from)
+}
+
+function pickRandom(list) {
+ return list[Math.floor(Math.random() * list.length)]
+}
+
+handler.modes = modes
+
+export default handler
\ No newline at end of file
diff --git a/plugins/menus.js b/plugins/menus.js
new file mode 100644
index 00000000..90ebe6ad
--- /dev/null
+++ b/plugins/menus.js
@@ -0,0 +1,17 @@
+import axios from 'axios'
+
+let handler = async (m, { text, conn, usedPrefix, command }) => {
+
+
+ await conn.sendButton(m.chat,result, author, '', [['Menu', `${usedPrefix}menu`]], null, [['Menu 2',`${usedPrefix}menu2``]]
+,[['Menu 3',`${usedPrefix}menu3``]],[['Menu 4',`${usedPrefix}menu4`]],m)
+
+ }
+
+handler.help = ['menus']
+
+handler.tags = ['new']
+
+handler.command = ['menus']
+
+export default handler
diff --git a/plugins/nsfw-nsfw.js b/plugins/nsfw-nsfw.js
index e6ca3a75..4006bf51 100644
--- a/plugins/nsfw-nsfw.js
+++ b/plugins/nsfw-nsfw.js
@@ -50,8 +50,8 @@ case 'cosplay':
default:
}
}
-// handler.help = ['ass', 'boobs', 'lesbian', 'pussy', 'pack']
-// handler.tags = ['nsfw']
+ handler.help = ['ass', 'boobs', 'lesbian', 'pussy', 'pack']
+ handler.tags = ['nsfw']
handler.command = /^(ass|gand|boobs|boobies|lesbian|lesbians|pussy|chut|cosplay|pack)$/i
handler.diamond = true
handler.register = true
diff --git a/plugins/ocr.js b/plugins/ocr.js
new file mode 100644
index 00000000..dfa1e47a
--- /dev/null
+++ b/plugins/ocr.js
@@ -0,0 +1,53 @@
+import uploadFile from '../lib/uploadFile.js'
+import uploadImage from '../lib/uploadImage.js'
+import { webp2png } from '../lib/webp2mp4.js'
+import fetch from 'node-fetch'
+import displayLoadingScreen from '../lib/loading.js'
+
+let handler = async (m, { conn, args, text, usedPrefix, command }) => {
+ var out
+
+ let q = m.quoted ? m.quoted : m
+ let mime = (q.msg || q).mimetype || q.mediaType || ''
+ if (/video/g.test(mime)) {
+ return m.reply('video files not supported!')
+ }
+ if (!/webp|image|viewOnce/g.test(mime))
+ return m.reply(`Reply media with\n${usedPrefix + command}`)
+ let img = await q.download?.()
+
+ if (/webp/g.test(mime)) {
+ out = await webp2png(img)
+ } else if (/image/g.test(mime)) {
+ out = await uploadImage(img)
+ } else if (/viewOnce/g.test(mime)) {
+ out = await uploadFile(img)
+ }
+ //await m.reply(wait)
+ await displayLoadingScreen(conn, m.chat)
+ try {
+ let res
+ if (args[0]) {
+ res = await (
+ await fetch(
+ 'https://api.ocr.space/parse/imageurl?apikey=K88889328888957&url=' +
+ out +
+ '&language=' +
+ args[0]
+ )
+ ).json()
+ } else {
+ res = await (
+ await fetch('https://api.ocr.space/parse/imageurl?apikey=K88889328888957&url=' + out)
+ ).json()
+ }
+ await m.reply('*OCR RESULT*\n\n' + res.ParsedResults[0].ParsedText)
+ } catch (e) {
+ throw `some error occured!\n\n${e}`
+ }
+}
+handler.help = ['ocr']
+handler.tags = ['tools']
+handler.command = /^ocr$/i
+
+export default handler
\ No newline at end of file
diff --git a/plugins/owner-addsudo.js b/plugins/owner-addsudo.js
index a36957c8..bf38873e 100644
--- a/plugins/owner-addsudo.js
+++ b/plugins/owner-addsudo.js
@@ -1,22 +1,22 @@
let handler = async (m, { conn, text }) => {
- let who;
- if (m.isGroup) {
- who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text;
- } else {
- who = m.chat;
- }
- let name = await conn.getName(m.quoted.sender)
- if (!who) throw 'Tag the person you want to make an Owner!';
- if (global.owner.includes(who.split('@')[0])) throw 'This person is already an owner!';
- global.owner.push([who.split('@')[0], name, true]);
- const caption = `Now @${who.split('@')[0]} has been made an Owner!`;
- await conn.reply(m.chat, caption, m, {
- mentions: conn.parseMention(caption)
- });
+ let who
+ if (m.isGroup) {
+ who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : text
+ } else {
+ who = m.chat
+ }
+ let name = await conn.getName(m.quoted.sender)
+ if (!who) throw 'Tag the person you want to make an Owner!'
+ if (global.owner.includes(who.split('@')[0])) throw 'This person is already an owner!'
+ global.owner.push([who.split('@')[0], name, true])
+ const caption = `Now @${who.split('@')[0]} has been made an Owner!`
+ await conn.reply(m.chat, caption, m, {
+ mentions: conn.parseMention(caption),
+ })
}
handler.help = ['addowner @user']
handler.tags = ['owner']
-handler.command = /^(add|give|-)(owner|sudo)$/i;
+handler.command = /^(add|give|-)(owner|sudo)$/i
handler.owner = true
-export default handler;
+export default handler
\ No newline at end of file
diff --git a/plugins/owner-allow.js b/plugins/owner-allow.js
index 58f363dc..b687c1cc 100644
--- a/plugins/owner-allow.js
+++ b/plugins/owner-allow.js
@@ -1,20 +1,22 @@
let handler = async (m, { conn, text, usedPrefix, command }) => {
- let who
- if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : false
- else who = m.chat
- let user = global.db.data.users[who]
- if (!who) throw `โณ๏ธ Tag or mention someone\n\n๐ Example : ${usedPrefix + command} @user`
- if (global.allowed.includes(who.split`@`[0])) throw 'The user Mentioned is already allowed to use the bot in DM '
- global.allowed.push(`${who.split`@`[0]}`)
-
- conn.reply(m.chat, ` @${who.split`@`[0]} got the ultimate pass to use the bot in DM`, m, { mentions: [who] })
-
- }
- handler.help = ['allow <@tag>']
- handler.tags = ['owner']
- handler.command = ['allow', 'makeallow', 'al']
-
- handler.group = true
- handler.rowner = true
-
- export default handler
+ let who
+ if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : false
+ else who = m.chat
+ let user = global.db.data.users[who]
+ if (!who) throw `โณ๏ธ Tag or mention someone\n\n๐ Example : ${usedPrefix + command} @user`
+ if (global.allowed.includes(who.split`@`[0]))
+ throw 'The user Mentioned is already allowed to use the bot in DM '
+ global.allowed.push(`${who.split`@`[0]}`)
+
+ conn.reply(m.chat, ` @${who.split`@`[0]} got the ultimate pass to use the bot in DM`, m, {
+ mentions: [who],
+ })
+}
+handler.help = ['allow <@tag>']
+handler.tags = ['owner']
+handler.command = ['allow', 'makeallow', 'al']
+
+handler.group = true
+handler.rowner = true
+
+export default handler
\ No newline at end of file
diff --git a/plugins/owner-banUser.js b/plugins/owner-banUser.js
index adbb8e9b..74d71b9e 100644
--- a/plugins/owner-banUser.js
+++ b/plugins/owner-banUser.js
@@ -5,16 +5,16 @@ let handler = async (m, { conn, text, usedPrefix, command }) => {
if (m.isGroup) who = m.mentionedJid[0] ? m.mentionedJid[0] : m.quoted ? m.quoted.sender : false
else who = m.chat
let user = global.db.data.users[who]
- if (!who) throw `โณ๏ธ Tag or mention someone\n\n๐ Example : ${usedPrefix + command} @user`
+ if (!who) throw `โณ๏ธ Tag or mention someone\n\n๐ Example : ${usedPrefix + command}`
let users = global.db.data.users
users[who].banned = true
conn.reply(m.chat, `
-โ
BANNED
+โ
STAR-๐BANNED
โโโโโโโโโโโ
@${who.split`@`[0]} you will no longer be able to use my commands `, m, { mentions: [who] })
}
-handler.help = ['ban @user']
+handler.help = ['ban']
handler.tags = ['owner']
handler.command = /^ban$/i
handler.rowner = true
diff --git a/plugins/owner-broadcast.js b/plugins/owner-broadcast.js
index 99e32992..98076969 100644
--- a/plugins/owner-broadcast.js
+++ b/plugins/owner-broadcast.js
@@ -1,22 +1,40 @@
-//import Connection from '../lib/connection.js'
-import { randomBytes } from 'crypto'
-
-let handler = async (m, { conn, text }) => {
- let chats = Object.entries(conn.chats).filter(([_, chat]) => chat.isChats).map(v => v[0])
- let cc = conn.serializeM(text ? m : m.quoted ? await m.getQuotedObj() : false || m)
- let teks = text ? text : cc.text
- conn.reply(m.chat, `โ
BROADCAST done *Total:* ${chats.length} chats`, m)
- for (let id of chats) await conn.copyNForward(id, conn.cMod(m.chat, cc, /bc|broadcast|tx/i.test(teks) ? teks : `*BROADCAST โ OWNER*\n_____________________\n ${teks} ` ), true).catch(_ => _)
- m.reply('โ
Broadcast to all chats :)')
+let handler = async (m, { conn, isROwner, text }) => {
+ const delay = time => new Promise(res => setTimeout(res, time))
+ let getGroups = await conn.groupFetchAllParticipating()
+ let groups = Object.entries(getGroups)
+ .slice(0)
+ .map(entry => entry[1])
+ let anu = groups.map(v => v.id)
+ var pesan = m.quoted && m.quoted.text ? m.quoted.text : text
+ if (!pesan) throw '*ENTER THE MESSAGE YOU WANT TO BROADCAST*'
+ for (let i of anu) {
+ await delay(500)
+ conn
+ .relayMessage(
+ i,
+ {
+ liveLocationMessage: {
+ degreesLatitude: 35.685506276233525,
+ degreesLongitude: 139.75270667105852,
+ accuracyInMeters: 0,
+ degreesClockwiseFromMagneticNorth: 2,
+ caption: '[ATTENTION]\n\n' + pesan + '\n\nTHIS IS AN OFFICIAL STATEMENT',
+ sequenceNumber: 2,
+ timeOffset: 3,
+ contextInfo: m,
+ },
+ },
+ {}
+ )
+ .catch(_ => _)
+ }
+ m.reply(
+ `*MESSAGE SENT TO ${anu.length} GROUP/S*\n\n*NOTE: THIS COMMAND MAY FAIL AND NOT BE SENT TO ALL CHATS, SORRY FOR THE TIME BEING*`
+ )
}
-handler.help = ['tx']
+handler.help = ['broadcastgroup', 'bcgc'].map(v => v + ' ')
handler.tags = ['owner']
-handler.command = /^(broadcast|bc|tx)$/i
+handler.command = /^(broadcast|bc)(group|grup|gc)$/i
handler.owner = true
-export default handler
-
-const more = String.fromCharCode(8206)
-const readMore = more.repeat(4001)
-
-const randomID = length => randomBytes(Math.ceil(length * .5)).toString('hex').slice(0, length)
+export default handler
\ No newline at end of file
diff --git a/plugins/owner-inspect.js b/plugins/owner-inspect.js
index f10c57e9..745beccb 100644
--- a/plugins/owner-inspect.js
+++ b/plugins/owner-inspect.js
@@ -30,7 +30,7 @@ const extractGroupMetadata = (result) => {
const metadata = {
id: group.attrs.id.includes('@') ? group.attrs.id : baileys.jidEncode(group.attrs.id, 'g.us'),
subject: group.attrs.subject,
- creation: new Date(+group.attrs.creation * 1000).toLocaleString('id', { timeZone: 'Asia/Jakarta' }),
+ creation: new Date(+group.attrs.creation * 1000).toLocaleString('id', { timeZone: 'Africa/Lagos' }),
owner: group.attrs.creator ? 'wa.me/' + baileys.jidNormalizedUser(group.attrs.creator).split('@')[0] :
group.attrs.id.includes('-') ? 'wa.me/' + group.attrs.id.split('-')[0] : '',
desc
diff --git a/plugins/owner-restart.js b/plugins/owner-restart.js
index d4711485..2cce5964 100644
--- a/plugins/owner-restart.js
+++ b/plugins/owner-restart.js
@@ -2,7 +2,7 @@ import { spawn } from 'child_process'
let handler = async (m, { conn, isROwner, text }) => {
if (!process.send) throw 'Dont: node main.js\nDo: node index.js'
if (conn.user.jid == conn.user.jid) {
- await m.reply('๐ Restarting Bot...\n Wait a moment')
+ await m.reply('STAR-MD-V2...๐ Restarting Bot...\n Wait a moment')
process.send('reset')
} else throw 'eh'
}
diff --git a/plugins/owner-update.js b/plugins/owner-update.js
index f20be06c..c8006dbd 100644
--- a/plugins/owner-update.js
+++ b/plugins/owner-update.js
@@ -1,76 +1,38 @@
-// by mznking (https://github.com/mznking)
-import axios from 'axios';
-import { exec } from 'child_process';
-
-let handler = async (m, { conn, isOwner }) => {
- if (!isOwner) {
- return conn.reply(m.chat, 'โ Only the owner can use this command.', m);
- }
-
- const repositoryURL = 'https://api.github.com/repos/salmanytofficial/XLICON-V2-MD';
-
- try {
- const command = m.text.toLowerCase();
-
- if (command === 'update') {
- await checkForUpdates(conn, repositoryURL, m);
- } else if (command === 'update now') {
- await updateBot(conn, m);
- } else {
- conn.reply(m.chat, 'โ Invalid command. Use `update` to check for updates or `update now` to update the bot.', m);
- }
- } catch (error) {
- console.error('An error occurred:', error.message);
- conn.reply(m.chat, `โ An error occurred: ${error.message}`, m);
- }
-};
-
-async function checkForUpdates(conn, repositoryURL, m) {
- try {
- const commitHistoryResponse = await axios.get(`${repositoryURL}/commits/main`);
-
- if (commitHistoryResponse.status === 200) {
- const commitHistory = commitHistoryResponse.data;
- const latestCommitSHA = commitHistory[0]?.sha;
-
- const localBotVersion = '1.0.0'; // Replace with your logic to fetch the version dynamically
-
- if (latestCommitSHA !== localBotVersion) {
- conn.reply(m.chat, '๐ Bot update available! Use `update now` to update the bot.', m);
+import { execSync } from 'child_process';
+import { existsSync } from 'fs';
+import { join } from 'path';
+
+const repoUrl = 'https://github.com/Xcelsama/STAR-V2';
+const repoDir = join(process.cwd(), 'STAR-V2'); // Directory where the repo will be cloned
+
+const handler = async (m, { conn, text }) => {
+ if (conn.user.jid === conn.user.jid) {
+ // Function to check if the directory is a Git repository
+ const isGitRepository = (directory) => {
+ return existsSync(join(directory, '.git'));
+ };
+
+ try {
+ if (!existsSync(repoDir)) {
+ // Clone the repository if it does not exist
+ execSync(`git clone ${repoUrl} ${repoDir}`);
+ conn.reply(m.chat, 'Repository cloned successfully.', m);
+ } else if (isGitRepository(repoDir)) {
+ // Pull the latest changes if it is already a Git repository
+ execSync('git pull', { cwd: repoDir });
+ conn.reply(m.chat, 'Repository updated successfully.', m);
} else {
- conn.reply(m.chat, 'โ
Bot is already up to date.', m);
+ conn.reply(m.chat, 'Error: The directory exists but is not a git repository.', m);
}
- } else {
- console.error('Unable to fetch commit history:', commitHistoryResponse.statusText);
- conn.reply(m.chat, 'โ Unable to fetch commit history.', m);
+ } catch (error) {
+ conn.reply(m.chat, `Error occurred: ${error.message}`, m);
}
- } catch (error) {
- throw error;
- }
-}
-
-async function updateBot(conn, m) {
- try {
- conn.reply(m.chat, '๐ Updating bot, please wait...', m);
-
- exec('git pull origin main', (error, stdout, stderr) => {
- if (error) {
- console.error('Error updating bot:', error.message);
- conn.reply(m.chat, `โ Error updating bot: ${error.message}`, m);
- return;
- }
-
- console.log('Bot updated successfully:', stdout);
- conn.reply(m.chat, 'โ
Bot updated successfully!', m);
- });
- } catch (error) {
- throw error;
}
-}
+};
-handler.help = ['update', 'update now'];
+handler.help = ['update'];
handler.tags = ['owner'];
-handler.command = ['update'];
-handler.owner = true;
+handler.command = ['update', 'actualizar', 'fix', 'fixed'];
+handler.rowner = true;
-export default handler;
+export default handler;
\ No newline at end of file
diff --git a/plugins/plugin-install.js b/plugins/plugin-install.js
index 324b14c3..296cc122 100644
--- a/plugins/plugin-install.js
+++ b/plugins/plugin-install.js
@@ -31,7 +31,7 @@ let handler = async (m, { text, usedPrefix, command }) => {
// Write the Gist file content to the plugin file
await fs.promises.writeFile(pluginPath, file.content);
- m.reply(`successfully installed the plugin to XLICON Bot`);
+ m.reply(`successfully installed the plugin to STAR-MD`);
}
} catch (error) {
throw `Error fetching or saving the plugin: ${error.message}`;
diff --git a/plugins/poetry.js b/plugins/poetry.js
new file mode 100644
index 00000000..bd0e32b7
--- /dev/null
+++ b/plugins/poetry.js
@@ -0,0 +1,21 @@
+import fetch from 'node-fetch';
+
+let handler = async (m, { conn }) => {
+ try {
+ let _0x45fa91 = await fetch('https://shizoapi.onrender.com/api/texts/shayari?apikey=shizo');
+ if (!_0x45fa91.ok) throw await _0x45fa91.text();
+ let { result: _0x1aa994 } = await _0x45fa91.json();
+
+ m.reply(_0x1aa994 ? _0x1aa994 : "_Request Denied from Server!");
+ m.react('โ
'); // Assuming this is how you indicate success
+ } catch (_0x303ba6) {
+ console.error(_0x303ba6);
+ m.react('โ'); // Assuming this is how you indicate error
+ }
+};
+
+handler.help = ['poetry'];
+handler.tags = ['fun'];
+handler.command = ['poetry'];
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/qr.js b/plugins/qr.js
new file mode 100644
index 00000000..6a0b7beb
--- /dev/null
+++ b/plugins/qr.js
@@ -0,0 +1,9 @@
+import { toDataURL } from 'qrcode'
+let handler = async (m, { text, conn }) => {
+if (!text) throw `Enter Text or Link that Converted in QR Code`
+conn.sendFile(m.chat, await toDataURL(text.slice(0, 2048), { scale: 8 }), 'qrcode.png', maker, m)
+}
+handler.help = ['', 'code'].map(v => 'qr' + v + ' ')
+handler.tags = ['tools']
+handler.command = /^qr(code)?$/i
+export default handler
\ No newline at end of file
diff --git a/plugins/samsung.js b/plugins/samsung.js
new file mode 100644
index 00000000..487645b7
--- /dev/null
+++ b/plugins/samsung.js
@@ -0,0 +1,643 @@
+import { createHash } from 'crypto'
+import PhoneNumber from 'awesome-phonenumber'
+import { canLevelUp, xpRange } from '../lib/levelling.js'
+import fetch from 'node-fetch'
+import fs from 'fs'
+const { levelling } = '../lib/levelling.js'
+import moment from 'moment-timezone'
+import { promises } from 'fs'
+import { join } from 'path'
+const time = moment.tz('Asia/Kolkata').format('HH')
+let wib = moment.tz('Asia/Kolkata').format('HH:mm:ss')
+//import db from '../lib/database.js'
+
+let handler = async (m, { conn, usedPrefix, command}) => {
+ let d = new Date(new Date + 3600000)
+ let locale = 'en'
+ let week = d.toLocaleDateString(locale, { weekday: 'long' })
+ let date = d.toLocaleDateString(locale, { day: 'numeric', month: 'long', year: 'numeric' })
+ let _uptime = process.uptime() * 1000
+ let uptime = clockString(_uptime)
+let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
+if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
+let pp = './XLICON.jpg'
+let user = global.db.data.users[who]
+let { name, exp, diamond, lastclaim, registered, regTime, age, level, role, warn } = global.db.data.users[who]
+let { min, xp, max } = xpRange(user.level, global.multiplier)
+let username = conn.getName(who)
+let math = max - xp
+let prem = global.prems.includes(who.split`@`[0])
+let sn = createHash('md5').update(who).digest('hex')
+let totaluser = Object.values(global.db.data.users).length
+let rtotalreg = Object.values(global.db.data.users).filter(user => user.registered == true).length
+let more = String.fromCharCode(8206)
+let readMore = more.repeat(850)
+let greeting = ucapan()
+let quote = quotes[Math.floor(Math.random() * quotes.length)];
+
+let taguser = '@' + m.sender.split("@s.whatsapp.net")[0]
+let str = `
+
+ เฝ|โโ๐ค _BOT STATUS:_๐คโโ|เฝ
+ โ------- *IPHONE-MENU* ------โ
+
+โโ๐
*MADE BY EXCEL* ๐
+| โโ *Creator:* ๐ด๐๐ฒ๐ด๐ป
+| ๐ค *Bot Name:* STAR-V2
+| ๐ป *Host:* Linux Lair
+| ๐ฃ *Prefix:* ${usedPrefix}
+| ๐ *Uptime:* ${uptime}
+| ๐ *Database:* ${rtotalreg} of ${totaluser}
+| ๐ *Total Users:* ${totaluser}
+โฐโโโโโโโโโโโโโโโโถ
+
+โโโ ๏ธ๏ธใโฐ *_Today's Sauce!_* โฐใ
+| ๐ *Today's Date:* ${date}
+| โฒ๏ธ *Current Time:* ${wib}
+โฐโโโโโโโโโโโโโโโโถ
+
+โโ๐
ใ *๐คUSER* ใ
+| ๐พ *User Tag:* ${taguser}
+| ๐ *Name:* ${name}
+| โฐ *Master Mind:* ๐ด๐๐ฒ๐ด๐ป
+| ๐ *Diamonds:* -9999
+| ๐ *Rank:* ${role}
+| ๐ฎ *XP:* ${exp}
+โฐโโโโโโโโโโโโโโโโถ
+
+
+โโโใ *_Fellowship_* ใโ
+โโ*bible [chapter_number|chapter_name]
+โ*quran [surah_number|surah_name]
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_AI_* ใโ
+โโ*bingimg2
+โโ*chatgpt
+โโ*aisearch
+โโ*toanime
+โโ*gitagpt
+โโ*chat
+โโ*blackbox
+โโ*bingimg
+โโ*tocartoon
+โโ*dalle
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_image_* ใโ
+โโ*blackpink
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_tools_* ใโ
+โโ*gemini
+โโ*nowa
+โโ*qr
+โโ*qrcode
+โโ*weather **
+โโ*shortlink
+โโ*bitly
+โโ*dehaze
+โโ*recolor
+โโ*hdr
+โโ*get
+โโ*length
+โโ*tinyurl
+โโ*shorten
+โโ*tempmail
+โโ*shazam
+โโ*cal
+โโ*.carbon
+โโ*define
+โโ*element
+โโ*itunes
+โโ*lyrics
+โโ*imdb
+โโ*course
+โโ*randomcourse
+โโ*readmore |
+โโ*readvo
+โโ*removebg
+โโ*ss
+โโ*ssf
+โโ*style
+โโ*subreddit
+โโ*telesticker โ
+โโ*tourl
+โโ*translate
+โโ*tts
+โโ*wa
+โโ*wikipedia
+โโ*true
+โโ*findmusic
+โโ*githubstalk
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_group_* ใโ
+โโ*getbio <@tag/reply> โ
+โโ*getbio <@tag/reply> โ
+โโ*animequote
+โโ*Setdesc
+โโ*setname
+โโ*add
+โโ*delete
+โโ*delwarn @user
+โโ*demote (@tag)
+โโ*infogp
+โโ*hidetag
+โโ*invite <917xxx>
+โโ*kick @user
+โโ*link
+โโ*poll question|option|option
+โโ*profile
+โโ*promote
+โโ*resetlink
+โโ*setbye
+โโ*group *open/close*
+โโ*setwelcome
+โโ*simulate @user
+โโ*staff
+โโ*tagall
+โโ*totag
+โโ*warn @user
+โโ*warns
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_anime_* ใโ
+โโ*anime
+โโ*akira
+โโ*akiyama
+โโ*anna
+โโ*asuna
+โโ*ayuzawa
+โโ*boruto
+โโ*chiho
+โโ*chitoge
+โโ*deidara
+โโ*erza
+โโ*elaina
+โโ*eba
+โโ*emilia
+โโ*hestia
+โโ*hinata
+โโ*inori
+โโ*isuzu
+โโ*itachi
+โโ*itori
+โโ*kaga
+โโ*kagura
+โโ*kaori
+โโ*keneki
+โโ*kotori
+โโ*kurumi
+โโ*madara
+โโ*mikasa
+โโ*miku
+โโ*minato
+โโ*naruto
+โโ*nezuko
+โโ*sagiri
+โโ*sasuke
+โโ*sakura
+โโ*akira
+โโ*amv โ
+โโ*waifu
+โโ*neko
+โโ*zerotwo
+โโ*loli
+โโ*jjanime โ
+โโ*pokedex
+โโ*trace
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_img_* ใโ
+โโ*messi
+โโ*cristianoronaldo
+โโ*cr7
+โโ*ppcouple
+โโ*ppcp
+โโ*pinterest
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_owner_* ใโ
+โโ*leavegc
+โโ*out
+โโ*deletechat
+โโ*pin
+โโ*unpin
+โโ*deletechat
+โโ*addprem <@tag>
+โโ*addowner @user
+โโ*allow <@tag>
+โโ*HEROKU
+โโ*ban @user
+โโ*banchat
+โโ*tx
+โโ*broadcastgroup
+โโ*bcgc
+โโ*cleartmp
+โโ*delexpired
+โโ*delprem @user
+โโ*removeowner @user
+โโ*setppbotfull
+โโ*getplugin
+โโ*getfile
+โโ*join
+โโ*reset <54xxx>
+โโ*resetprefix
+โโ*restart
+โโ*.setprefix
+โโ*.setprefix [symbol]
+โโ*unban @user
+โโ*unbanchat
+โโ*update
+โโ*update now
+โโ*config
+โโ*listban
+โโ*deleteplugin
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_fun_* ใโ
+โโ*afk
+โโ*tomp3
+โโ*toav
+โโ*toxicity
+โโ*bot
+โโ*character @tag
+โโ*dare
+โโ*flirt
+โโ*gay @user
+โโ*joke
+โโ*pickupline
+โโ*question
+โโ*shayari
+โโ*ship
+โโ*yomamajoke
+โโ*truth
+โโ*waste @user
+โโ*perv
+โโ*handsome
+โโ*hot
+โโ*sexy
+โโ*ugly
+โโ*cute
+โโ*playboy
+โโ*playgirl
+โโ*beautiful
+โโ*lesbian
+โโ*whore
+โโ*motherfucker
+โโ*sucker
+โโ*horny
+โโ*foolish
+โโ*nibba
+โโ*nibbi
+โโ*bitch
+โโ*waifu
+โโ*crackhead
+โโ*rascal
+โโ*idiot
+โโ*girlyboy
+โโ*tomboy
+โโ*gigachad
+โโ*mf
+โโ*introvert
+โโ*extrovert
+โโ*sigma
+โโ*psycho
+โโ*brainless
+โโ*useless
+โโ*singer
+โโ*image
+โโ*meme
+โโ*quote
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_reaction_* ใโ
+โโ*bully @tag
+โโ*cuddle @tag
+โโ*cry @tag
+โโ*hug @tag
+โโ*awoo @tag
+โโ*kiss @tag
+โโ*lick @tag
+โโ*pat @tag
+โโ*smug @tag
+โโ*bonk @tag
+โโ*yeet @tag
+โโ*blush @tag
+โโ*smile @tag
+โโ*wave @tag
+โโ*highfive @tag
+โโ*handhold @tag
+โโ*nom @tag
+โโ*bite @tag
+โโ*glomp @tag
+โโ*slap @tag
+โโ*kill @tag
+โโ*happy @tag
+โโ*wink @tag
+โโ*poke @tag
+โโ*dance @tag
+โโ*cringe @tag
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_utility_* ใโ
+โโ*bmi
+โโ*crypto
+โโ*currency
+โโ*countdown
+โโ*prayertime
+โโ*convert
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_main_* ใโ
+โโ*channel
+โโ*database
+โโ*user
+โโ*gpguru
+โโ*alive
+โโ*blocklist
+โโ*info
+โโ*owner
+โโ*totalfeature
+โโ*hack
+โโ*list
+โโ*botmenu
+โโ*ownermenu
+โโ*groupmenu
+โโ*dlmenu
+โโ*downloadermenu
+โโ*economymenu
+โโ*funmenu
+โโ*gamemenu
+โโ*stickermenu
+โโ*nsfwmenu
+โโ*logomenu
+โโ*toolmenu
+โโ*animemenu2
+โโ*animemenu
+โโ*listprem
+โโ*logomenu2
+โโ*ping
+โโ*ping2
+โโ*runtime
+โโ*script
+โโ*server
+โโ*system
+โโ*blocklist
+โโ*setprivacy
+โโ*allmenu
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_cmd_* ใโ
+โโ*delcmd
+โโ*listcmd
+โโ*setcmd
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_information_* ใโ
+โโ*cninfo
+โโ*fact
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_finance_* ใโ
+โโ*crypto
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_cryptocurrency_* ใโ
+โโ*crypto
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_time_* ใโ
+โโ*countdown
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_downloader_* ใโ
+โโ*facebook
+โโ*gdrive ๐
+โโ*gitclone
+โโ*igstalk
+โโ*instagram
+โโ*mediafire
+โโ*mega
+โโ*modapk
+โโ*play
+โโ*play2
+โโ*playvid
+โโ*play3 โ
+โโ*tiktok
+โโ*tiktokstalk
+โโ*twitter
+โโ*ytmp3
+โโ*ytsearch
+โโ*ytmp4
+โโ*wallpaper
+โโ*play โ
+โโ*play โ
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_premium_* ใโ
+โโ*gdrive ๐
+โโ*mediafire
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_economy_* ใโ
+โโ*addgold <@user>
+โโ*addxp <@user>
+โโ*bank
+โโ*buych
+โโ*cock-fight
+โโ*buy
+โโ*buyall
+โโ*daily
+โโ*deposit
+โโ*gamble
+โโ*give credit [amount] [@tag]
+โโ*levelup
+โโ*rank
+โโ*rob
+โโ*roulette
+โโ*wallet
+โโ*withdraw
+โโ*work
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_core_* ใโ
+โโ*leaderboard
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_game_* ใโ
+โโ*slot
+โโ*chess [from to]
+โโ*chess delete
+โโ*chess join
+โโ*chess start
+โโ*delttt
+โโ*guessflag
+โโ*Maths
+โโ*ppt
+โโ*tictactoe
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_config_* ใโ
+โโ*enable
+โโ*disable
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_internet_* ใโ
+โโ*google
+โโ*s
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_maker_* ใโ
+โโ*blur
+โโ*difuminar2
+โโ*hornycard
+โโ*hornylicense
+โโ*gfx1
+โโ*gfx2
+โโ*gfx3
+โโ*gfx4
+โโ*gfx5
+โโ*gfx6
+โโ*gfx7
+โโ*gfx8
+โโ*gfx9
+โโ*gfx10
+โโ*gfx11
+โโ*gfx12
+โโ*simpcard
+โโ*itssostupid
+โโ*iss
+โโ*stupid
+โโ*tweet
+โโ*lolicon
+โโ*quozio
+โโ*qmkr
+โโ*ytcomment
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_nsfw_* ใโ
+โโ*nsfw
+โฐโโโโโโโโโโโโโโโโโโ
+โโโใ *_advanced_* ใโ
+โโ$
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_plugin_* ใโ
+โโ*plugins
+โโ*install
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_rg_* ใโ
+โโ*reg
+โโ*mysn
+โโ*unreg
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_sticker_* ใโ
+โโ*emojimix
+โโ*getsticker
+โโ*smaker
+โโ*stickerwithmeme (caption|reply media)
+โโ*swmeme
+โโ*swm(caption|reply media)
+โโ*sfull
+โโ*toimg
+โโ*tovid
+โโ*trigger <@user>
+โโ*ttp
+โโ*ttp2
+โโ*ttp3
+โโ*ttp4
+โโ*ttp5
+โโ*attp
+โโ*attp2
+โโ*attp3
+โโ*take |
+โฐโโโโโโโโโโโโโโโโโโข
+โโโโใ *_audio_* ใโ
+โโ*bass [vn]
+โโ*blown [vn]
+โโ*deep [vn]
+โโ*earrape [vn]
+โโ*fast [vn]
+โโ*fat [vn]
+โโ*nightcore [vn]
+โโ*reverse [vn]
+โโ*robot [vn]
+โโ*slow [vn]
+โโ*smooth [vn]
+โโ*tupai [vn]
+โฐโโโโโโโโโโโโโโโโโโข
+โโโใ *_news_* ใโ
+โโ*news
+โโ*technews
+โฐโโโโโโโโโโโโโโโโโโข
+โโโขใ *_conversion_* ใโ
+โโ*convert
+โฐโโโโโโโโโโโโโโโโโโข
+XLICON-๐ผ๐ณ-๐
๐ธ ๐ฑ๐ AB AND SALMAN`
+
+
+ conn.sendFile(m.chat, pp, 'perfil.jpg', str, m, null, rpyt)
+ m.react(done)
+
+}
+handler.help = ['main']
+handler.tags = ['group']
+handler.command = ['menu1', 'imenu']
+
+export default handler
+function clockString(ms) {
+ let h = isNaN(ms) ? '--' : Math.floor(ms / 3600000)
+ let m = isNaN(ms) ? '--' : Math.floor(ms / 60000) % 60
+ let s = isNaN(ms) ? '--' : Math.floor(ms / 1000) % 60
+ return [h, m, s].map(v => v.toString().padStart(2, 0)).join(':')}
+
+ function ucapan() {
+ const time = moment.tz('Asia/Kolkata').format('HH')
+ let res = "happy early in the dayโ๏ธ"
+ if (time >= 4) {
+ res = "Good Morning ๐"
+ }
+ if (time >= 10) {
+ res = "Good Afternoon โ๏ธ"
+ }
+ if (time >= 15) {
+ res = "Good Afternoon ๐"
+ }
+ if (time >= 18) {
+ res = "Good Night ๐"
+ }
+ return res
+ }
+ const quotes = [
+ "I'm not lazy, I'm just on my energy saving mode.",
+ "Life is short, smile while you still have teeth.",
+ "I may be a bad influence, but darn I am fun!",
+ "I'm on a whiskey diet. I've lost three days already.",
+ "Why don't some couples go to the gym? Because some relationships don't work out.",
+ "I told my wife she should embrace her mistakes... She gave me a hug.",
+ "I'm great at multitasking. I can waste time, be unproductive, and procrastinate all at once.",
+ "You know you're getting old when you stoop to tie your shoelaces and wonder what else you could do while you're down there.",
+ "I'm so good at sleeping, I can do it with my eyes closed.",
+ "If you think nobody cares if youโre alive, try missing a couple of payments.",
+ "I used to think I was indecisive, but now I'm not so sure.",
+ "If you can't convince them, confuse them.",
+ "I told my wife she was drawing her eyebrows too high. She looked surprised.",
+ "I'm not clumsy, I'm just on a mission to test gravity.",
+ "I told my wife she should do more push-ups. She said, 'I could do a hundred!' So I counted to ten and stopped.",
+ "Life is like a box of chocolates; it doesn't last long if you're hungry.",
+ "I'm not saying I'm Wonder Woman, I'm just saying no one has ever seen me and Wonder Woman in the same room together.",
+ "Why do they call it beauty sleep when you wake up looking like a troll?",
+ "I don't always lose my phone, but when I do, it's always on silent.",
+ "My bed is a magical place where I suddenly remember everything I was supposed to do.",
+ "I love the sound you make when you shut up.",
+ "I'm not arguing, I'm just explaining why I'm right.",
+ "I'm not a complete idiot, some parts are missing.",
+ "When life gives you lemons, squirt someone in the eye.",
+ "I don't need anger management. You just need to stop making me angry.",
+ "I'm not saying I'm Batman. I'm just saying no one has ever seen me and Batman in the same room together.",
+ "I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
+ "I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
+ "I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together.",
+ "The early bird can have the worm because worms are gross and mornings are stupid.",
+ "If life gives you lemons, make lemonade. Then find someone whose life has given them vodka and have a party!",
+ "The road to success is always under construction.",
+ "I am so clever that sometimes I don't understand a single word of what I am saying.",
+ "Some people just need a high-five. In the face. With a chair.",
+ "I'm not saying I'm perfect, but I'm pretty close.",
+ "A day without sunshine is like, you know, night.",
+ "The best way to predict the future is to create it.",
+ "If you can't be a good example, then you'll just have to be a horrible warning.",
+ "I don't know why I keep hitting the escape button. I'm just trying to get out of here.",
+ "I'm not lazy. I'm on energy-saving mode.",
+ "I don't need a hairstylist, my pillow gives me a new hairstyle every morning.",
+ "I don't have a bad handwriting, I have my own font.",
+ "I'm not clumsy. It's just the floor hates me, the table and chairs are bullies, and the walls get in my way.",
+ "I'm not saying I'm Batman. I'm just saying no one has ever seen me and Batman in the same room together.",
+ "I'm not saying I'm Wonder Woman. I'm just saying no one has ever seen me and Wonder Woman in the same room together.",
+ "I'm not saying I'm Superman. I'm just saying no one has ever seen me and Superman in the same room together.",
+ "I'm not saying I'm Spider-Man. I'm just saying no one has ever seen me and Spider-Man in the same room together.",
+ "I'm not saying I'm a superhero. I'm just saying no one has ever seen me and a superhero in the same room together.",
+ "๐rest people",
+ "๐ฅฐyou know you shouldnt use a bot too much",
+ "๐คฃwhy are you using me ๐
เฅค",
+ "๐เฅค",
+ "๐คเฅค",
+ "๐ฐ",
+ "rest๐ you are using me too muchเฅค"
+];
\ No newline at end of file
diff --git a/plugins/set.privacy.js b/plugins/set.privacy.js
new file mode 100644
index 00000000..61c2f1a6
--- /dev/null
+++ b/plugins/set.privacy.js
@@ -0,0 +1,119 @@
+// Credit @Guru322
+// Credit Guru Sensei
+//plugin from guru-bot
+
+import pkg from '@whiskeysockets/baileys';
+const {
+ WA_DEFAULT_EPHEMERAL
+} = pkg;
+const handler = async (m, {
+ conn,
+ args,
+ usedPrefix
+}) => {
+
+ const validValues = {
+ lastseen: ['all', 'contacts', 'contact_blacklist', 'none'],
+ online: ['all', 'match_last_seen'],
+ picture: ['all', 'contacts', 'contact_blacklist', 'none'],
+ status: ['all', 'contacts', 'contact_blacklist', 'none'],
+ readreceipts: ['all', 'none'],
+ groupsadd: ['all', 'contacts', 'contact_blacklist', 'none'],
+ disappearingmode: [WA_DEFAULT_EPHEMERAL, 0, 86400, 604800, 7776000]
+ };
+
+ const typeNumber = parseInt(args[0]);
+ const valueNumber = parseInt(args[1]);
+
+ const typeKeys = Object.keys(validValues);
+
+ const privacyTypes = Object.keys(validValues).map((type, index) => `${index + 1}. ${type}`).join('\n');
+ const helpMessage = `How to use? : ${usedPrefix}setprivacy [type_number] [value_number]\n\n` +
+ "List Options:\n" +
+ privacyTypes;
+
+ if (!typeNumber || isNaN(typeNumber) || typeNumber < 1 || typeNumber > typeKeys.length) {
+ m.reply(helpMessage);
+ return;
+ }
+
+ const selectedType = typeKeys[typeNumber - 1];
+ const validTypeValues = validValues[selectedType];
+
+ const validTypeValuesList = validTypeValues.map((type, index) => `${index + 1}. ${type}`).join('\n');
+ const typeHelpMessage = `How to use: ${usedPrefix}setprivacy [type_number] [value_number]\n\n` +
+ "List Options:\n" +
+ validTypeValuesList;
+
+ if (!valueNumber || isNaN(valueNumber) || valueNumber < 1 || valueNumber > validTypeValues.length) {
+ m.reply(typeHelpMessage);
+ return;
+ }
+
+ const selectedValue = validTypeValues[valueNumber - 1];
+
+ const privacyType = selectedType.charAt(0).toUpperCase() + selectedType.slice(1);
+
+ switch (selectedType) {
+ case 'lastseen':
+ await conn.updateLastSeenPrivacy(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ }).catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ case 'online':
+ await conn.updateOnlinePrivacy(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ }).catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ case 'picture':
+ await conn.updateProfilePicturePrivacy(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ }).catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ case 'status':
+ await conn.updateStatusPrivacy(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ }).catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ case 'readreceipts':
+ await conn.updateReadReceiptsPrivacy(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ }).catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ case 'groupsadd':
+ await conn.updateGroupsAddPrivacy(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ })
+ .catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ case 'disappearingmode':
+ await conn.updateDefaultDisappearingMode(selectedValue).then(() => {
+ m.reply(`Privacy ${privacyType} has been changed to ${selectedValue}`);
+ })
+ .catch(() => {
+ m.reply(`Cannot change privacy ${privacyType}`);
+ });
+ break;
+ default:
+ m.reply(typeHelpMessage);
+ }
+};
+
+handler.help = ['setprivacy'];
+handler.tags = ['main'];
+handler.command = /^(setprivacy)$/i;
+handler.owner = true;
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/star.js b/plugins/star.js
new file mode 100644
index 00000000..8f38d4cf
--- /dev/null
+++ b/plugins/star.js
@@ -0,0 +1,23 @@
+import { delay } from '@whiskeysockets/baileys';
+
+let teddy = async (m, { conn, text, args, usedPrefix, command }) => {
+ try {
+ if (text.toLowerCase().includes("teddy")) {
+ let teddyBear = ['๐', '', 'โจ', '๐ซ', '๐', 'โจ', '๐', 'โญ', '๐ '];
+ for (let i = 0; i < teddyBear.length; i++) {
+ await conn.sendMessage(m.chat, `Here's a teddy bear for you: ${teddyBear[i]}`, { quoted: m });
+ await delay(500);
+ }
+ }
+ await conn.chatRead(m.chat);
+ await m.reply('๐ ');
+ } catch (error) {
+ console.error(error);
+ m.reply('Oops! Something went wrong.');
+ }
+};
+
+teddy.help = ['star'];
+teddy.tags = ['fun'];
+teddy.command = /^(star)$/i;
+export default star;
\ No newline at end of file
diff --git a/plugins/stream.js b/plugins/stream.js
new file mode 100644
index 00000000..747a5daf
--- /dev/null
+++ b/plugins/stream.js
@@ -0,0 +1,24 @@
+import axios from 'axios';
+
+let handler = async (m, { text, conn, usedPrefix, command }) => {
+ // Define 'result' and 'author' with static values
+ let result = 'HAVE FUN WATCHING ANIME'; // Replace with your actual static message
+ let author = '๐ด๐ก๐๐๐'; // Replace with the actual author name or relevant string
+
+ await conn.sendButton(
+ m.chat,
+ result,
+ author,
+ 'https://telegra.ph/file/8eb79a63a0bed4cd90c76.jpg',
+ [['GROUPS', `${usedPrefix}groups`]],
+ null,
+ [['STREAM ANIME', 'https://www.anime-planet.com/anime/watch-online/']],
+ m
+ );
+};
+
+handler.help = ['stream'];
+handler.tags = ['main'];
+handler.command = ['stream'];
+
+export default handler;
\ No newline at end of file
diff --git a/plugins/studymenu.js b/plugins/studymenu.js
index 3d07e380..ea49d362 100644
--- a/plugins/studymenu.js
+++ b/plugins/studymenu.js
@@ -1,7 +1,7 @@
let handler = async (m, { conn, usedPrefix, command}) => {
let who = m.quoted ? m.quoted.sender : m.mentionedJid && m.mentionedJid[0] ? m.mentionedJid[0] : m.fromMe ? conn.user.jid : m.sender
if (!(who in global.db.data.users)) throw `โณ๏ธ The user is not found in my database`
-let pp = './Assets/XLICON-V2.jpg'
+let pp = './Assets/STAR-V2.jpg'
let more = String.fromCharCode(8206)
let readMore = more.repeat(850)
let lkr = `
diff --git a/plugins/subreddit.js b/plugins/subreddit.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/td.js b/plugins/td.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/test.js b/plugins/test.js
index 61a5ad85..2d73d76c 100644
--- a/plugins/test.js
+++ b/plugins/test.js
@@ -1,12 +1,23 @@
import fs from 'fs'
import fetch from 'node-fetch'
-let handler = async (m, { conn, usedPrefix: _p }) => {
- let img = "https://avatars.githubusercontent.com/u/106463398?v=4"
-let info = `*STAR BOT IS ACTIVE*`
-await conn.reply(m.chat, info, m, { contextInfo: { mentionedJid: [m.sender],forwardingScore: 256,
- isForwarded: true, externalAdReply: { title: author, body: botname, sourceUrl: fgyt, thumbnail: await conn.getFile(img) }}})
+let handler = async (m, { conn, usedPrefix: _p }) => {
+ let img = 'https://avatars.githubusercontent.com/u/106463398?v=4'
+ let info = `*STAR BOT IS ACTIVE*`
+ await conn.reply(m.chat, info, m, {
+ contextInfo: {
+ mentionedJid: [m.sender],
+ forwardingScore: 256,
+ isForwarded: true,
+ externalAdReply: {
+ title: author,
+ body: botname,
+ sourceUrl: fgyt,
+ thumbnail: await conn.getFile(img),
+ },
+ },
+ })
}
-handler.customPrefix = /^(Ab|bot|test)$/i
-handler.command = new RegExp
+handler.customPrefix = /^(tes|tess|test)$/i
+handler.command = new RegExp()
-export default handler
+export default handler
\ No newline at end of file
diff --git a/plugins/tool-autosticker.js b/plugins/tool-autosticker.js
index 34e393bf..ff63f93e 100644
--- a/plugins/tool-autosticker.js
+++ b/plugins/tool-autosticker.js
@@ -5,86 +5,122 @@ import fetch from 'node-fetch'
let handler = m => m
handler.all = async function (m) {
-let chat = db.data.chats[m.chat]
-let user = db.data.users[m.sender]
+ let chat = db.data.chats[m.chat]
+ let user = db.data.users[m.sender]
-if (chat.autosticker && m.isGroup) {
-let q = m
-let stiker = false
-let wm = 'AsliGuru'
-let mime = (q.msg || q).mimetype || q.mediaType || ''
-if (/webp/g.test(mime)) return
-if (/image/g.test(mime)) {
-let img = await q.download?.()
-if (!img) return
-stiker = await createSticker(img, false, packname || global.packname, author || global.author)
-//stiker = await sticker(img, false, packname, author)
-} else if (/video/g.test(mime)) {
-//if (/video/g.test(mime)) if ((q.msg || q).seconds > 8) return await this.sendButton(m.chat, '*Send video of 7 seconds*', wm, [['DEACTIVE AUTOSTICKER', '/disable autosticker']], m)
-if (/video/g.test(mime)) if ((q.msg || q).seconds > 8) return await this.sendReply(m.chat,{text:'*Send video of 7 seconds*'}, m.sender)
-let img = await q.download()
-if (!img) return
-stiker = await mp4ToWebp(img, { pack: packname || global.packname, author: author || global.author })
-//stiker = await sticker(img, false, packname, author)
-} else if (m.text.split(/\n| /i)[0]) {
-if (isUrl(m.text)) stiker = await createSticker(false, args[0], '', author, 20)
-else return
-}
-if (stiker) {
-let img = await(await fetch('https://raw.githubusercontent.com/Guru322/api/Guru/guru.jpg')).buffer()
-await this.sendFile(m.chat, stiker, 'error.jpg', null, m, false, { contextInfo: { showAdAttribution: true }})
-}}
-return !0
+ if (chat.autosticker && m.isGroup) {
+ let q = m
+ let stiker = false
+ let wm = 'AsliGuru'
+ let mime = (q.msg || q).mimetype || q.mediaType || ''
+ if (/webp/g.test(mime)) return
+ if (/image/g.test(mime)) {
+ let img = await q.download?.()
+ if (!img) return
+ stiker = await createSticker(img, false, packname || global.packname, author || global.author)
+ //stiker = await sticker(img, false, packname, author)
+ } else if (/video/g.test(mime)) {
+ //if (/video/g.test(mime)) if ((q.msg || q).seconds > 8) return await this.sendButton(m.chat, '*Send video of 7 seconds*', wm, [['DEACTIVE AUTOSTICKER', '/disable autosticker']], m)
+ if (/video/g.test(mime))
+ if ((q.msg || q).seconds > 8)
+ return await this.sendReply(m.chat, { text: '*Send video of 7 seconds*' }, m.sender)
+ let img = await q.download()
+ if (!img) return
+ stiker = await mp4ToWebp(img, {
+ pack: packname || global.packname,
+ author: author || global.author,
+ })
+ //stiker = await sticker(img, false, packname, author)
+ } else if (m.text.split(/\n| /i)[0]) {
+ if (isUrl(m.text)) stiker = await createSticker(false, args[0], '', author, 20)
+ else return
+ }
+ if (stiker) {
+ let img = await (
+ await fetch('https://raw.githubusercontent.com/Guru322/api/Guru/guru.jpg')
+ ).buffer()
+ await this.sendFile(m.chat, stiker, 'error.jpg', null, m, false, {
+ contextInfo: { showAdAttribution: true },
+ })
+ }
+ }
+ return !0
}
export default handler
-const isUrl = (text) => {
-return text.match(new RegExp(/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)(jpe?g|gif|png|mp4)/, 'gi'))}
+const isUrl = text => {
+ return text.match(
+ new RegExp(
+ /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)(jpe?g|gif|png|mp4)/,
+ 'gi'
+ )
+ )
+}
async function createSticker(img, url, packName, authorName, quality) {
-let stickerMetadata = { type: 'full', pack: packName, author: authorName, quality }
-return (new Sticker(img ? img : url, stickerMetadata)).toBuffer()}
+ let stickerMetadata = { type: 'full', pack: packName, author: authorName, quality }
+ return new Sticker(img ? img : url, stickerMetadata).toBuffer()
+}
async function mp4ToWebp(file, stickerMetadata) {
-if (stickerMetadata) {
-if (!stickerMetadata.pack) stickerMetadata.pack = 'โ'
-if (!stickerMetadata.author) stickerMetadata.author = 'โ'
-if (!stickerMetadata.crop) stickerMetadata.crop = false
-} else if (!stickerMetadata) { stickerMetadata = { pack: 'โ', author: 'โ', crop: false }}
-let getBase64 = file.toString('base64')
-const Format = { file: `data:video/mp4;base64,${getBase64}`, processOptions: { crop: stickerMetadata?.crop, startTime: '00:00:00.0', endTime: '00:00:7.0', loop: 0
-}, stickerMetadata: { ...stickerMetadata },
-sessionInfo: {
-WA_VERSION: '2.2106.5',
-PAGE_UA: 'WhatsApp/2.2037.6 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
-WA_AUTOMATE_VERSION: '3.6.10 UPDATE AVAILABLE: 3.6.11',
-BROWSER_VERSION: 'HeadlessChrome/88.0.4324.190',
-OS: 'Windows Server 2016',
-START_TS: 1614310326309,
-NUM: '6247',
-LAUNCH_TIME_MS: 7934,
-PHONE_VERSION: '2.20.205.16'
-},
-config: {
-sessionId: 'session',
-headless: true,
-qrTimeout: 20,
-authTimeout: 0,
-cacheEnabled: false,
-useChrome: true,
-killProcessOnBrowserClose: true,
-throwErrorOnTosBlock: false,
-chromiumArgs: [
-'--no-sandbox',
-'--disable-setuid-sandbox',
-'--aggressive-cache-discard',
-'--disable-cache',
-'--disable-application-cache',
-'--disable-offline-load-stale-cache',
-'--disk-cache-size=0'
-],
-executablePath: 'C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe',
-skipBrokenMethodsCheck: true,
-stickerServerEndpoint: true
-}}
-let res = await fetch('https://sticker-api.openwa.dev/convertMp4BufferToWebpDataUrl', { method: 'post', headers: { Accept: 'application/json, text/plain, /', 'Content-Type': 'application/json;charset=utf-8', }, body: JSON.stringify(Format)})
-return Buffer.from((await res.text()).split(';base64,')[1], 'base64')}
+ if (stickerMetadata) {
+ if (!stickerMetadata.pack) stickerMetadata.pack = 'โ'
+ if (!stickerMetadata.author) stickerMetadata.author = 'โ'
+ if (!stickerMetadata.crop) stickerMetadata.crop = false
+ } else if (!stickerMetadata) {
+ stickerMetadata = { pack: 'โ', author: 'โ', crop: false }
+ }
+ let getBase64 = file.toString('base64')
+ const Format = {
+ file: `data:video/mp4;base64,${getBase64}`,
+ processOptions: {
+ crop: stickerMetadata?.crop,
+ startTime: '00:00:00.0',
+ endTime: '00:00:7.0',
+ loop: 0,
+ },
+ stickerMetadata: { ...stickerMetadata },
+ sessionInfo: {
+ WA_VERSION: '2.2106.5',
+ PAGE_UA:
+ 'WhatsApp/2.2037.6 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
+ WA_AUTOMATE_VERSION: '3.6.10 UPDATE AVAILABLE: 3.6.11',
+ BROWSER_VERSION: 'HeadlessChrome/88.0.4324.190',
+ OS: 'Windows Server 2016',
+ START_TS: 1614310326309,
+ NUM: '6247',
+ LAUNCH_TIME_MS: 7934,
+ PHONE_VERSION: '2.20.205.16',
+ },
+ config: {
+ sessionId: 'session',
+ headless: true,
+ qrTimeout: 20,
+ authTimeout: 0,
+ cacheEnabled: false,
+ useChrome: true,
+ killProcessOnBrowserClose: true,
+ throwErrorOnTosBlock: false,
+ chromiumArgs: [
+ '--no-sandbox',
+ '--disable-setuid-sandbox',
+ '--aggressive-cache-discard',
+ '--disable-cache',
+ '--disable-application-cache',
+ '--disable-offline-load-stale-cache',
+ '--disk-cache-size=0',
+ ],
+ executablePath: 'C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe',
+ skipBrokenMethodsCheck: true,
+ stickerServerEndpoint: true,
+ },
+ }
+ let res = await fetch('https://sticker-api.openwa.dev/convertMp4BufferToWebpDataUrl', {
+ method: 'post',
+ headers: {
+ Accept: 'application/json, text/plain, /',
+ 'Content-Type': 'application/json;charset=utf-8',
+ },
+ body: JSON.stringify(Format),
+ })
+ return Buffer.from((await res.text()).split(';base64,')[1], 'base64')
+}
\ No newline at end of file
diff --git a/plugins/tool-pdf.js b/plugins/tool-pdf.js
index 903a545b..122de425 100644
--- a/plugins/tool-pdf.js
+++ b/plugins/tool-pdf.js
@@ -1,12 +1,23 @@
import uploadImage from '../lib/uploadImage.js'
let handler = async (m, { conn, text, usedPrefix, command, isOwner }) => {
-let q = m.quoted ? m.quoted : m
-let mime = (q.msg || q).mimetype || ''
-if (!mime) throw '*Respond / reply to an image*'
-let img = await q.download?.()
-let url = await uploadImage(img)
-let docname = text ? text : m.pushName || 'Gurubot'
-conn.sendFile(m.chat, `http://api.lolhuman.xyz/api/convert/imgtopdf?apikey=${lolkeysapi}&img=${url}`, docname + '.pdf', '', m, false, { asDocument: true })
+ let q = m.quoted ? m.quoted : m
+ let mime = (q.msg || q).mimetype || ''
+ if (!mime) throw '*Respond / reply to an image*'
+ let img = await q.download?.()
+ let url = await uploadImage(img)
+ let docname = text ? text : m.pushName || 'Gurubot'
+ conn.sendFile(
+ m.chat,
+ `http://api.lolhuman.xyz/api/convert/imgtopdf?apikey=${lolkeysapi}&img=${url}`,
+ docname + '.pdf',
+ '',
+ m,
+ false,
+ { asDocument: true }
+ )
}
-handler.command = /^topdf$/i
-export default handler
\ No newline at end of file
+handler.help = ['topdf','pdf'];
+handler.tags = ['tools'];
+handler.command = /^(topdf|pdf)$/i;
+
+export default handler;
diff --git a/plugins/tool-tempmail.js b/plugins/tool-tempmail.js
index b59848b2..64aeb07c 100644
--- a/plugins/tool-tempmail.js
+++ b/plugins/tool-tempmail.js
@@ -1,63 +1,67 @@
//thanks to inrl:https://github.com/inrl-official
-import fetch from 'node-fetch';
+import fetch from 'node-fetch'
let handler = async (m, { text, usedPrefix, command }) => {
if (command === 'tempmail') {
try {
- const response = await fetch('https://inrl-web-fkns.onrender.com/api/getmail?apikey=inrl');
- const data = await response.json();
+ const response = await fetch('https://inrl-web-fkns.onrender.com/api/getmail?apikey=inrl')
+ const data = await response.json()
if (data.status && data.result && data.result.length > 0) {
- const tempMails = data.result.join('\n');
- const replyMessage = `*Temporary Email Addresses:*\n\n${tempMails}\n\n use \`\`\`\.checkmail \`\`\`\ if you want to check inbox of any temp mail used from above`;
- m.reply(replyMessage);
+ const tempMails = data.result.join('\n')
+ const replyMessage = `*Temporary Email Addresses:*\n\n${tempMails}\n\n use \`\`\`\.checkmail \`\`\`\ if you want to check inbox of any temp mail used from above`
+ m.reply(replyMessage)
} else {
- m.reply('No temporary email addresses found.');
+ m.reply('No temporary email addresses found.')
}
} catch (error) {
- console.error('Error:', error);
- m.reply('Failed to fetch temporary email addresses.');
+ console.error('Error:', error)
+ m.reply('Failed to fetch temporary email addresses.')
}
} else if (command === 'checkmail') {
if (!text && !(m.quoted && m.quoted.text)) {
- m.reply('Please provide some text or quote a message to get a response.');
- return;
+ m.reply('Please provide some text or quote a message to get a response.')
+ return
}
if (!text && m.quoted && m.quoted.text) {
- text = m.quoted.text;
+ text = m.quoted.text
} else if (text && m.quoted && m.quoted.text) {
- text = `${text} ${m.quoted.text}`;
+ text = `${text} ${m.quoted.text}`
}
try {
- const response = await fetch(`https://inrl-web-fkns.onrender.com/api/getmailinfo?email=${encodeURIComponent(text)}&apikey=inrl`);
- const data = await response.json();
+ const response = await fetch(
+ `https://inrl-web-fkns.onrender.com/api/getmailinfo?email=${encodeURIComponent(text)}&apikey=inrl`
+ )
+ const data = await response.json()
if (data.status && data.result && data.result.length > 0) {
- const messages = data.result.map((message) => {
- return `
+ const messages = data.result
+ .map(message => {
+ return `
*From:* ${message.from}
*Subject:* ${message.subject}
*Date:* ${message.date}
*Body:*
${message.text}
- `;
- }).join('\n\n---\n\n');
- const replyMessage = `*Messages in* ${text}:\n\n${messages}`;
- m.reply(replyMessage);
+ `
+ })
+ .join('\n\n---\n\n')
+ const replyMessage = `*Messages in* ${text}:\n\n${messages}`
+ m.reply(replyMessage)
} else {
- m.reply(`No messages found in ${text}.`);
+ m.reply(`No messages found in ${text}.`)
}
} catch (error) {
- console.error('Error:', error);
- m.reply(`Failed to check messages in ${text}.`);
+ console.error('Error:', error)
+ m.reply(`Failed to check messages in ${text}.`)
}
}
-};
+}
handler.help = ['tempmail']
handler.tags = ['tools']
-handler.command = ['tempmail', 'checkmail'];
-handler.diamond = false;
+handler.command = ['tempmail', 'checkmail']
+handler.diamond = false
-export default handler;
+export default handler
\ No newline at end of file
diff --git a/plugins/tool-whatmusic.js b/plugins/tool-whatmusic.js
index a18369a6..704a284e 100644
--- a/plugins/tool-whatmusic.js
+++ b/plugins/tool-whatmusic.js
@@ -24,13 +24,14 @@ let txt = `
โข ๐พ ๐ฐ๐ป๐ฑ๐๐ผ: ${album.name || 'NOT FOUND'}
โข ๐ ๐ถ๐ด๐ฝ๐ด๐: ${genres !== undefined ? genres.map(v => v.name).join(', ') : 'NOT FOUND'}
โข ๐ RELEASE DATE: ${release_date || 'NOT FOUND'}
+ยฉSTAR-MD-V2
`.trim()
fs.unlinkSync(`./tmp/${m.sender}.${ext}`)
m.reply(txt)
} else throw '*๐๐ด๐๐ฟ๐พ๐ฝ๐ณ ๐ฐ๐๐ณ๐ธ๐พ*'
}
-handler.help = ['shazam']
+handler.help = ['findmusic']
handler.tags = ['tools']
-handler.command = /^quemusica|shazam|whatmusic$/i
+handler.command = /^quemusica|shazam2|whatmusic$/i
export default handler
\ No newline at end of file
diff --git a/plugins/tools-encrypt.js b/plugins/tools-encrypt.js
index 9193a82c..49dc6311 100644
--- a/plugins/tools-encrypt.js
+++ b/plugins/tools-encrypt.js
@@ -1,7 +1,7 @@
import JavaScriptObfuscator from 'javascript-obfuscator'
let handler = async(m, { conn, text }) => {
-if (!text) return m.reply(`*${lenguajeGB['smsAvisoMG']()}Past the code you want to encrypt*`)
+if (!text) return m.reply(`*${lenguajeGB['smsAvisoMG']()}Paste the code you want to encrypt*`)
function obfuscateCode(code) {
return JavaScriptObfuscator.obfuscate(code, { compact: false, controlFlowFlattening: true, deadCodeInjection: true, simplify: true, numbersToExpressions: true }).getObfuscatedCode();
}
@@ -9,4 +9,4 @@ let obfuscatedCode = await obfuscateCode(text);
conn.sendMessage(m.chat, {text: obfuscatedCode}, {quoted: m});
}
handler.command = /^(ofuscar|ofuscador|obs)$/i
-export default handler
+export default handler
\ No newline at end of file
diff --git a/plugins/tools-styletext.js b/plugins/tools-styletext.js
index 0916b097..3934df3c 100644
--- a/plugins/tools-styletext.js
+++ b/plugins/tools-styletext.js
@@ -1,43 +1,47 @@
-import fetch from 'node-fetch';
+import fetch from 'node-fetch'
let handler = async (m, { conn, text }) => {
// Split the text into words
- let words = text.split(' ');
+ let words = text.split(' ')
// The first word should be the key, the rest is the text to stylize
- let key = words[0];
- let textToStyle = words.slice(1).join(' ');
+ let key = words[0]
+ let textToStyle = words.slice(1).join(' ')
// If no key and text provided, show all styles of a default text
if (words.length === 0 || !key || !textToStyle) {
- let defaultText = 'Xlicon BOT';
- let styledTexts = await Promise.all([...Array(34).keys()].map(i => stylizeText(defaultText, i + 1)));
- conn.reply(m.chat, styledTexts.join`\n\n`, m);
- return;
+ let defaultText = 'GURU BOT'
+ let styledTexts = await Promise.all(
+ [...Array(34).keys()].map(i => stylizeText(defaultText, i + 1))
+ )
+ conn.reply(m.chat, styledTexts.join`\n\n`, m)
+ return
}
// Check if the key is a number between 1 and 34
if (!Number.isInteger(+key) || +key < 1 || +key > 34) {
- throw 'Invalid key. Please provide a number between 1 and 34.';
+ throw 'Invalid key. Please provide a number between 1 and 34.'
}
// Get the styled text
- let styledText = await stylizeText(textToStyle, key);
+ let styledText = await stylizeText(textToStyle, key)
- conn.reply(m.chat, styledText, m);
+ conn.reply(m.chat, styledText, m)
}
-handler.help = ['style'].map(v => v + ' ');
-handler.tags = ['tools'];
-handler.command = /^(fancy)$/i;
-handler.exp = 0;
+handler.help = ['style'].map(v => v + ' ')
+handler.tags = ['tools']
+handler.command = /^(fancy)$/i
+handler.exp = 0
-export default handler;
+export default handler
async function stylizeText(text, key) {
- let res = await fetch(`https://inrl-web-fkns.onrender.com/api/fancy?text=${encodeURIComponent(text)}&key=${key}`);
- let data = await res.json();
+ let res = await fetch(
+ `https://inrl-web-fkns.onrender.com/api/fancy?text=${encodeURIComponent(text)}&key=${key}`
+ )
+ let data = await res.json()
// Use 'result' field for the styled text.
- return `*Key ${key}*\n${data.result}`;
- }
+ return `*Key ${key}*\n${data.result}`
+}
\ No newline at end of file
diff --git a/plugins/topdf.js b/plugins/topdf.js
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/unknown.js b/plugins/unknown.js
new file mode 100644
index 00000000..9027fac4
--- /dev/null
+++ b/plugins/unknown.js
@@ -0,0 +1,26 @@
+import fetch from 'node-fetch'
+let handler = async (m, {
+ text,
+ command,
+ usedPrefix,
+ conn
+}) => {
+
+var suggest = `Type the command Along with Promp ๐ฅบ`
+if (!text) throw suggest
+try {
+ let res = await(await fetch('https://lexica.art/api/v1/search?q=' + text)).json()
+ let randm = res.images
+ let resul = randm.getRandom()
+ await m.reply(wait)
+ await conn.sendFile(m.chat,
+ resul.src, text, maker + "\n*Creative:* " + resul.prompt + '\n\n https://github.com/Xcelsama/STAR-MD-V2', m)
+ } catch (e) {
+ throw e
+ }
+}
+handler.help = ["lexica"]
+handler.tags = ['ai']
+handler.command = ["lexica"]
+
+export default handler
\ No newline at end of file
diff --git a/plugins/wabeta.js b/plugins/wabeta.js
new file mode 100644
index 00000000..747fe47e
--- /dev/null
+++ b/plugins/wabeta.js
@@ -0,0 +1,47 @@
+const fetch = require('node-fetch');
+
+let handler = async (m, { conn }) => {
+ try {
+ let res = await fetch('https://api.maher-zubair.tech/details/wabetainfo');
+ if (!res.ok) throw await res.text();
+ let json = await res.json();
+ if (!json.result) throw new Error("No result found");
+
+ const { title, subtitle, date, image, link, desc, QandA } = json.result;
+
+ let output = `*${title || "No Title"}*\n\n`;
+ output += `${subtitle || "No Subtitle"}\n`;
+ output += `${date || "No Date"}\n\n`;
+ output += `${desc || "No Description"}\n\n`;
+ output += `*Link:* ${link || "No Link"}\n\n`;
+
+ if (image) {
+ output += `\n\n`;
+ }
+
+ if (QandA && QandA.length > 0) {
+ output += "*Q&A:*\n";
+ QandA.forEach((qa) => {
+ output += `*${qa.question}*\n${qa.answer}\n\n`;
+ });
+ }
+
+ // Check if thumbnail is available before sending it
+ if (json.result.thumbnail) {
+ await conn.sendFile(m.chat, json.result.thumbnail, 'thumbnail.jpg', output, m);
+ } else {
+ await conn.sendMessage(m.chat, output, { quoted: m });
+ }
+
+ m.react('โ
'); // Assuming this is how you indicate success
+ } catch (e) {
+ console.error(e);
+ await m.react('โ'); // Assuming this is how you indicate error
+ }
+};
+
+handler.help = ['wabeta'];
+handler.tags = ['news'];
+handler.command = ['wabeta'];
+
+module.exports = handler;
\ No newline at end of file
diff --git a/plugins/whatmusic.js b/plugins/whatmusic.js
new file mode 100644
index 00000000..06c87c3b
--- /dev/null
+++ b/plugins/whatmusic.js
@@ -0,0 +1,35 @@
+import fs from 'fs'
+import acrcloud from 'acrcloud'
+let acr = new acrcloud({
+host: 'identify-eu-west-1.acrcloud.com',
+access_key: 'c33c767d683f78bd17d4bd4991955d81',
+access_secret: 'bvgaIAEtADBTbLwiPGYlxupWqkNGIjT7J9Ag2vIu'
+})
+
+let handler = async (m) => {
+let q = m.quoted ? m.quoted : m
+let mime = (q.msg || q).mimetype || ''
+if (/audio|video/.test(mime)) {
+let media = await q.download()
+let ext = mime.split('/')[1]
+fs.writeFileSync(`./tmp/${m.sender}.${ext}`, media)
+let res = await acr.identify(fs.readFileSync(`./tmp/${m.sender}.${ext}`))
+let { code, msg } = res.status
+if (code !== 0) throw msg
+let { title, artists, album, genres, release_date } = res.metadata.music[0]
+let txt = `
+โข ๐ Title: ${title}
+โข ๐จโ๐ค Singer: ${artists !== undefined ? artists.map(v => v.name).join(', ') : 'Unable to Detect'}
+โข ๐พ Album: ${album.name || 'Unable to Detect'}
+โข ๐ Genres: ${genres !== undefined ? genres.map(v => v.name).join(', ') : 'Unable to Detect'}
+โข ๐ Release: ${release_date || 'Unable to Detect'}
+`.trim()
+fs.unlinkSync(`./tmp/${m.sender}.${ext}`)
+m.reply(txt)
+} else throw 'Failed to get The details'
+}
+
+handler.help = ['findmusic']
+handler.tags = ['tools']
+handler.command = /^quemusica|quemusicaes|whatmusic|findmusic$/i
+export default handler
\ No newline at end of file
diff --git a/plugins/xcel.js b/plugins/xcel.js
new file mode 100644
index 00000000..8d0f913f
--- /dev/null
+++ b/plugins/xcel.js
@@ -0,0 +1,18 @@
+let handler = async (m, { conn, usedPrefix: _p, args, text, usedPrefix}) => {
+
+ if (!m.quoted) throw 'Reply Chat !'
+ if (text.length > 2) throw 'Just For 1 Emoji!'
+ if (!text) throw `Examples :\n${usedPrefix}react ๐ฟ`
+conn.relayMessage(m.chat, { reactionMessage: {
+key: {
+ id: m.quoted.id,
+ remoteJid: m.chat,
+ fromMe: true
+},
+ text: `${text}`}}, { messageId: m.id })
+ }
+ handler.help = ['react ']
+handler.tags = ['tools']
+handler.command = /^(react)$/i
+
+export default handler
\ No newline at end of file
diff --git "a/plugins/\342\230\240\357\270\217.js" "b/plugins/\342\230\240\357\270\217.js"
new file mode 100644
index 00000000..33136acc
--- /dev/null
+++ "b/plugins/\342\230\240\357\270\217.js"
@@ -0,0 +1,36 @@
+import { execSync } from 'child_process';
+import { existsSync } from 'fs';
+import { join } from 'path';
+
+const repoUrl = 'https://github.com/Xcelsama/STAR-V2';
+const repoDir = join(process.cwd(), 'STAR-V2'); // Directory where the repo is expected to be
+
+const handler = async (m, { conn, text }) => {
+ if (conn.user.jid === conn.user.jid) {
+ // Function to check if the directory is a Git repository
+ const isGitRepository = (directory) => {
+ return existsSync(join(directory, '.git'));
+ };
+
+ try {
+ if (existsSync(repoDir) && isGitRepository(repoDir)) {
+ // Pull the latest changes if it is already a Git repository
+ conn.reply(m.chat, 'Updating the repository...', m);
+ let stdout = execSync('git pull', { cwd: repoDir });
+ conn.reply(m.chat, 'Repository updated successfully.\n\n' + stdout.toString(), m);
+ } else {
+ conn.reply(m.chat, `Error: The directory ${repoDir} does not exist or is not a git repository. Please clone the repository first.`, m);
+ }
+ } catch (error) {
+ console.error('Git operation failed:', error); // Log to console for debugging
+ conn.reply(m.chat, `Error occurred: ${error.message}`, m);
+ }
+ }
+};
+
+handler.help = ['update'];
+handler.tags = ['owner'];
+handler.command = ['update', 'actualizar', 'fix', 'fixed'];
+handler.rowner = true;
+
+export default handler;
\ No newline at end of file
diff --git "a/plugins/\360\237\231\203. js" "b/plugins/\360\237\231\203. js"
new file mode 100644
index 00000000..e69de29b
diff --git a/render.yaml b/render.yaml
index 46c75c66..8b12322e 100644
--- a/render.yaml
+++ b/render.yaml
@@ -1,6 +1,6 @@
services:
- type: web
- name: XLICON-V2-MD
+ name: STAR-V2-MD
env: docker
region: Frankfurt
plan: free
diff --git a/replit.nix b/replit.nix
deleted file mode 100644
index a02e1258..00000000
--- a/replit.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ pkgs }: {
- deps = [
- pkgs.sudo
- pkgs.nodejs
- pkgs.nodePackages.typescript
- pkgs.ffmpeg
- pkgs.imagemagick
- pkgs.git
- pkgs.neofetch
- pkgs.libwebp
- pkgs.speedtest-cli
- pkgs.wget
- pkgs.yarn
- pkgs.pm2
- pkgs.libuuid
- ];
- env = {
- LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
- pkgs.libuuid
- ];
- };
-}
diff --git a/sample.env b/sample.env
deleted file mode 100644
index 80485ea4..00000000
--- a/sample.env
+++ /dev/null
@@ -1,8 +0,0 @@
-# ____REMOVE THIS LINE AFTER RENAMING sample.env to .env ____
-DATABASE_URL=
-SESSION_ID=
-REMOVEBG_KEY=
-PREFIX=
-MODE=
-autoRead=
-statusview=
diff --git a/server.js b/server.js
deleted file mode 100644
index 1513eb0a..00000000
--- a/server.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import express from 'express'
-import { createServer } from 'http'
-import path from 'path'
-import { Socket } from 'socket.io'
-import { toBuffer } from 'qrcode'
-import fetch from 'node-fetch'
-
-function connect(conn, PORT) {
- let app = global.app = express()
- console.log(app)
- let server = global.server = createServer(app)
- // app.use(express.static(path.join(__dirname, 'views')))
- let _qr = 'invalid'
-
- conn.ev.on('connection.update', function appQR({ qr }) {
- if (qr) _qr = qr
- })
-
- app.use(async (req, res) => {
- res.setHeader('content-type', 'image/png')
- res.end(await toBuffer(_qr))
- })
-
- // let io = new Socket(server)
- // io.on('connection', socket => {
- // let { unpipeEmit } = pipeEmit(conn, socket, 'conn-')
- // socket.on('disconnect', unpipeEmit)
- // })
-
- server.listen(PORT, () => {
- console.log('App listened on port', PORT)
- if (opts['keepalive']) keepAlive()
- })
-}
-
-function pipeEmit(event, event2, prefix = '') {
- let old = event.emit
- event.emit = function (event, ...args) {
- old.emit(event, ...args)
- event2.emit(prefix + event, ...args)
- }
- return {
- unpipeEmit() {
- event.emit = old
- }
- }
-}
-
-function keepAlive() {
- const url = `https://${process.env.REPL_SLUG}.${process.env.REPL_OWNER}.repl.co`
- if (/(\/\/|\.)undefined\./.test(url)) return
- setInterval(() => {
- fetch(url).catch(console.error)
- }, 5 * 1000 * 60)
-}
-
-
-export default connect
\ No newline at end of file
diff --git a/session/STAR.js b/session/STAR.js
new file mode 100644
index 00000000..9bde530f
--- /dev/null
+++ b/session/STAR.js
@@ -0,0 +1,4 @@
+/**
+ * @STAR_V2
+ * https://github.com/Xcelsama/STAR-MD-V2
+ */
diff --git a/session/XLICON.js b/session/XLICON.js
deleted file mode 100644
index 41ac3b20..00000000
--- a/session/XLICON.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * @XLICON_V2
- * https://github.com/salmanytofficial/XLICON-V2-MD
- */
\ No newline at end of file
diff --git a/session/file b/session/file
index 8b137891..8d1c8b69 100644
--- a/session/file
+++ b/session/file
@@ -1 +1 @@
-
+
diff --git a/test.js b/test.js
deleted file mode 100644
index e8dc74ed..00000000
--- a/test.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import fs from 'fs'
-import path, { dirname } from 'path'
-import assert from 'assert'
-import { spawn } from 'child_process'
-import syntaxError from 'syntax-error'
-import { fileURLToPath } from 'url'
-import { createRequire } from 'module'
-
-const __filename = fileURLToPath(import.meta.url)
-const __dirname = dirname(__filename)
-const require = createRequire(__dirname)
-
-let folders = ['.', ...Object.keys(require(path.join(__dirname, './package.json')).directories)]
-let files = []
-for (let folder of folders)
- for (let file of fs.readdirSync(folder).filter(v => v.endsWith('.js')))
- files.push(path.resolve(path.join(folder, file)))
-for (let file of files) {
- if (file == __filename) continue
- console.error('Checking', file)
- const error = syntaxError(fs.readFileSync(file, 'utf8'), file, {
- sourceType: 'module',
- allowReturnOutsideFunction: true,
- allowAwaitOutsideFunction: true
- })
- if (error) assert.ok(error.length < 1, file + '\n\n' + error)
- assert.ok(file)
- console.log('Done', file)
-}
\ No newline at end of file
diff --git a/tmp/STAR.js b/tmp/STAR.js
new file mode 100644
index 00000000..71495180
--- /dev/null
+++ b/tmp/STAR.js
@@ -0,0 +1,4 @@
+/**
+ * @STAR
+ * https://github.com/Xcelsama/STAR-MD-V2
+ */
diff --git a/tmp/XLCON.js b/tmp/XLCON.js
deleted file mode 100644
index 41ac3b20..00000000
--- a/tmp/XLCON.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * @XLICON_V2
- * https://github.com/salmanytofficial/XLICON-V2-MD
- */
\ No newline at end of file