ó
    Uu¢j%z  ã                  óÚ  • S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	J
r
Jr  SSKJrJr  SSKJr  \ " S S	5      5       r\ " S
 S5      5       r\ " S S5      5       r\ " S S5      5       rSSS.       S6S jjr      S7S jrS8S jr              S9S jr      S:S jrS;S jr                  S<S jr          S=S jr          S>S jr              S?S jr              S@S jrSAS jr                   SBS jr!                SCS  jr"            SDS! jr#                SES" jr$          SFS# jr%SGS$ jr&SHS% jr'SIS& jr(SJS' jr)SKS( jr*SLS) jr+SMS* jr,SNS+ jr-        SOS, jr.SPS- jr/SPS. jr0        SQS/ jr1        SRS0 jr2        SSS1 jr3SLS2 jr4STS3 jr5SUS4 jr6SVS5 jr7g)WzMSynthesize a Salesforce technical design document from requirements + design.é    )ÚannotationsN)Ú	dataclassÚfield)ÚListÚOptionalÚSequence)ÚDesignArtifactÚMetadataPlanItem)ÚRequirementsArtifactc                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚTechDocTableé   ú	List[str]ÚheadersúList[List[str]]Úrows© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    Ú;/var/www/html/gaurav/packages/artifacts/technical_design.pyr   r      s   ‡ àÓØ
Ör   r   c                  ól   • \ rS rSr% SrS\S'   \" \S9rS\S'   \" \S9r	S\S'   Sr
S\S	'   SrS
\S'   Srg)ÚTechDocBlocké   NúOptional[str]Úheading©Údefault_factoryr   Ú
paragraphsÚbulletsÚcodezOptional[TechDocTable]Útabler   )r   r   r   r   r!   r   r   Úlistr$   r%   r&   r'   r   r   r   r   r   r      s?   ‡ à!€Gˆ]Ó!Ù!°$Ñ7€J�	Ó7Ù¨tÑ4€GˆYÓ4Ø€Dˆ-ÓØ$(€EÐ!Ö(r   r   c                  ó@   • \ rS rSr% S\S'   S\S'   \" \S9rS\S'   S	rg
)ÚTechDocSectioné   ÚintÚnumberÚstrÚtitler"   zList[TechDocBlock]Úblocksr   N)	r   r   r   r   r   r   r(   r0   r   r   r   r   r*   r*      s   ‡ àƒKØƒJÙ!&°tÑ!<€FÐÖ<r   r*   c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚTechnicalDesignDocumenté$   r.   r/   zList[TechDocSection]Úsectionsr   Nr   r   r   r   r2   r2   $   s   ‡ àƒJØ"Ö"r   r2   Ú é´   )Újira_keyÚmax_lenc               ó`  • U =(       d    SR                  5       =(       d    SnU(       aT  [        R                  " S[        R                  " U5       S3SU[        R                  S9R                  5       =(       d    Sn[        R
                  " SU5      (       a  UnOSU 3nU(       a]  SU S	3U;  aS  S
U S	3nU[        U5      -
  nUS:  a	  SU S	3S U $ [        U5      U:”  a  US US-
   R                  5       S-   nU U 3nU$ [        U5      U:”  a  US US-
   R                  5       S-   nU$ )Nr5   ÚDesignz\s*\(z\)\s*$)Úflagsz(?i)^technical design\bu   Technical Design â€” Ú(Ú)ú (r   zTechnical Design (é   u   â€¦)ÚstripÚreÚsubÚescapeÚIÚmatchÚlenÚrstrip)Úsummaryr7   r8   Úfeaturer/   ÚsuffixÚbudgets          r   Útechnical_design_titlerL   *   s9  € ð �}˜"×#Ñ#Ó%×1¨€GæÜ—&’&˜E¤"§)¢)¨HÓ"5Ð!6°fÐ=¸rÀ7ÔRT×RVÑRVÑW×]Ñ]Ó_×kÐckˆÜ	‡x‚xÐ*¨G×4Ñ4Ø‰à'¨ yÐ1ˆÞ�a˜�z �O¨5Ó0Ø�h�Z˜qÐ!ˆàœ3˜v›;Ñ&ˆØ�B‹;Ø'¨ z°Ð3°H°WÐ=Ð=Üˆu‹:˜ÓØ˜,˜F Q™JÐ'×.Ñ.Ó0°5Ñ8ˆEØ�'˜&˜Ð"ˆð €Lô 
ˆU‹�gÓ	Ø�m˜ !™Ð$×+Ñ+Ó-°Ñ5ˆØ€Lr   c                ó€  • UR                    Vs/ sH  o"R                  S:X  d  M  UPM     nnUR                    Vs/ sH  o"R                  S:X  d  M  UPM     nnUR                    Vs/ sH  nUR                  S;  d  M  UPM     nn[        X5      nU(       a  US   OS nU(       a  UR                  (       a  UR                  OS =(       d    [	        U5      nU(       a  [        Xv5      OUR                  =(       d    U R                  n	U(       a  [        Xv5      O/ n
U(       a  [        XvU
5      OS n[        U
5      =(       d    [        Xv5      nU R                   Vs/ sH)  oÝR                  5       (       d  M  UR                  5       PM+     nnU(       d$  UR                    Vs/ sH  n[        U5      PM     nnU R                   Vs/ sH)  oÿR                  5       (       d  M  UR                  5       PM+     nnU(       d  SS/n[        [        R                   " SU[        R"                  5      5      n[%        U5      n['        XX‰UU5      [)        UU5      [+        X5X‰X«UU5      [-        XzX¼5      [/        X—UU5      [1        XGXšUU5      [3        X‰UUXJ5      [5        UU5      [7        X4XXXšUU5      [9        XèXšUUU5      [;        UUX4U5      [=        XXEX‰U5      /n[?        [A        UR                  =(       d    U R                  URB                  =(       d    U RB                  S9US	9$ s  snf s  snf s  snf s  snf s  snf s  snf )
NÚCustomFieldÚValidationRule>   rN   rO   r   zDocumentation and training.zProduction deployment.zpage layout)r7   )r/   r4   )"Úmetadata_planÚmetadata_typeÚ_blobÚobjectÚ_guess_objectÚ_field_labelrH   Ú_picklist_valuesÚ_default_valueÚboolÚ_mentions_picklistÚacceptance_criteriar@   Ú_plan_scope_lineÚout_of_scope_itemsrA   ÚsearchrD   Ú_required_type_valueÚ_overview_sectionÚ_scope_sectionÚ_data_model_sectionÚ_picklist_sectionÚ_layout_sectionÚ_validation_sectionÚ_processing_sectionÚ_security_sectionÚ_deployment_sectionÚ_testing_sectionÚ_traceability_sectionÚ_summary_sectionr2   rL   r7   )ÚrequirementsÚdesignÚiÚfieldsÚvalidationsÚotherÚblobÚprimaryÚobjÚlabelÚpicklist_valuesÚdefault_valueÚis_picklistÚaÚin_scopeÚxÚout_of_scopeÚlayouts_mentionedÚ
type_valuer4   s                       r   Úsynthesize_technical_documentr~   F   sÊ  € ð  ×-Ò-ÓRÑ-�A·±ÀMÑ1Q�aÑ-€FÐRØ$×2Ò2ÓZÑ2˜·o±oÐIYÑ6Y—1Ñ2€KÐZð ×%Ò%óá%ˆAØ�?‰?Ð"CÑC÷ 	
Ù%ð 
ð ô
 �Ó&€DÞ!ˆf�QŠi t€GÞ$¨¯¯ˆ7�>Š>¸T×
YÄmÐTXÓFY€CÞ+2ŒL˜Ô'¸¿¹×9_È<×K_ÑK_€EÞ9@Ô& wÔ5Àb€OÞFM”N 7°/ÔBÐSW€MÜ�Ó'×LÔ+=¸gÓ+L€Kà#/×#CÒ#CÓQÑ#C˜aÇwÁwÇy“	�—‘–	Ñ#C€HÐQÞØ17×1EÒ1EÓFÑ1E¨AÔ$ QÖ'Ñ1EˆÐFØ'3×'FÒ'FÓTÑ'F !Ï'É'Ï)“I�A—G‘G–IÑ'F€LÐTÞà)Ø$ð
ˆô
 œRŸYšY ~°t¼R¿T¹TÓBÓCÐÜ% dÓ+€Jô 	˜,°¸JÈÓTÜ�x Ó.Ü˜F¨3°ÐWbÐdnÓoÜ˜'°MÓOÜ˜Ð(9¸3Ó?Ü˜K°%È*ÐVZÓ[Ü˜C¨°zÀ;Ó`Ü˜,¨Ó4Ü˜F°¸UÐUbÐduÓvÜ˜¨ÀÈzÐ[lÓmÜ˜h¨°fÐK\Ó]Ü˜¨¸SÈÓTð€Hô #Ü$Ø�N‰N×2˜l×2Ñ2Ø—_‘_×=¨×(=Ñ(=ñ
ð ñð ùòU SùÚZùòùò RùâFùÚTs?   �L"¥L"»L'ÁL'Á'L,Á>L,ÅL1Å7L1Æ"L6ÇL;Ç!L;c           	     ó˜  • S[        U R                  5       S3/nU R                   GH�  nUR                  S[        UR                   SUR                   35       S35        UR
                   GHC  nUR                  (       a(  UR                  S[        UR                  5       S35        UR                   H!  nUR                  S[        U5       S	35        M#     UR                  (       aS  UR                  S
5        UR                   H!  nUR                  S[        U5       S35        M#     UR                  S5        UR                  (       a(  UR                  S[        UR                  5       S35        UR                  (       d  GM  UR                  [        UR                  5      5        GMF     GM’     SR                  U5      $ )Nz<h1>z</h1>z<h2>z. z</h2>z<h3>z</h3>z<p>z</p>z<ul>z<li>z</li>z</ul>z<pre>z</pre>Ú
)Ú_escr/   r4   Úappendr-   r0   r!   r$   r%   r&   r'   Ú_table_htmlÚjoin)ÚdocÚpartsÚsectionÚblockÚ	paragraphÚitems         r   Útechnical_document_storage_htmlr‹   }   sR  € Øœt C§I¡I›Ð/¨uÐ5Ð6€EØ—<•<ˆØ�‰�tœD G§N¡NÐ#3°2°g·m±m°_Ð!EÓFÐGÀuÐMÔNØ—^•^ˆEØ�}�}Ø—‘˜t¤D¨¯©Ó$7Ð#8¸Ð>Ô?Ø"×-Ô-�	Ø—‘˜s¤4¨	£?Ð"3°4Ð8Ö9ñ .à�}�}Ø—‘˜VÔ$Ø!ŸMœM�DØ—L‘L 4¬¨T«
 |°5Ð!9Ö:ñ *à—‘˜WÔ%Ø�z�zØ—‘˜u¤T¨%¯*©*Ó%5Ð$6°fÐ=Ô>Ø�{�{Š{Ø—‘œ[¨¯©Ó5×6ô $ñ  ð  �9‰9�UÓÐr   c                ó  • U(       a  SOSn[        X5      nU(       a  SU SU SU SU S[        U5       S3nOSU SU SU S	U S
3	nUUR                  =(       d    U R                  R	                  5       /n	U(       a.  U	R                  U SU SU SUR                  5        SU S3
5        U	 V
s/ sH  oª(       d  M  U
PM     nn
/ nU H  n
X¬;  d  M
  UR                  U
5        M     [        SS[        US9/5      $ s  sn
f )Nza custom picklistza custom fieldz&This change introduces a standardized z classification for Salesforce z records. Users will use z to classify z records as Ú.ú on z	 records.Ú z records must have z before they can be saved. For zs that are not zs, the field remains optional.r?   ÚOverview©r$   )	Ú_picklist_values_from_designÚ_join_orÚapproachrH   r@   r‚   Úlowerr*   r   )rk   rl   rs   rt   r}   rw   ÚcontrolÚvaluesÚintror$   ÚpÚcleanedÚuniques                r   r_   r_   ’   s=  € ö &1Ñ!Ð6F€GÜ)¨&Ó?€FÞà4°U°GÐ;ZØˆeÐ,¨W¨I°]À3À%À|Ü˜ÓÐ  ð#ñ 	ð 5°U°GÐ;ZØˆeÐ,¨W¨I°T¸#¸¸iðIð 	ð
 	Ø	�‰×	0˜L×0Ñ0×7Ñ7Ó9ð€Jö Ø×ÑØˆl˜!˜C˜5Ð 3°E°7ð ;Ø—9‘9“;�-˜¨z¨lÐ:XðZô	
ñ
 %Ó*™*�Q«�q™*€GÐ*Ø€FÛˆØ�?Ø�M‰M˜!Öñ ô ˜!˜Z¬,À&Ñ*IÐ)JÓKÐKùò +s   Â1	C>Â>C>c                ó´   • [        X5      nU R                   Vs/ sH  o3R                  S:X  d  M  UPM     nn[        U(       a
  US   U5      $ S U5      $ s  snf )NrN   r   )rR   rP   rQ   rV   )rl   rk   rq   rm   rn   s        r   r’   r’   ¹   sV   € ô �Ó&€DØ×-Ò-ÓRÑ-�A·±ÀMÑ1Q�aÑ-€FÐRÜ®˜F 1™I¸4Ó@Ð@°T¸4Ó@Ð@ùò Ss
   šA°Ac                óx   • [        SS[        S[        U 5      =(       d    S/S9[        S[        U5      S9/5      $ )Né   ÚScopezIn ScopezSee metadata plan.©r!   r%   zOut of Scope)r*   r   r(   )ry   r{   s     r   r`   r`   Á   s@   € ÜØ	Øä ´T¸(³^×5]ÐH\ÐG]Ñ^Ü ¼¸lÓ9KÑLð	
óð r   c                ó”  • / nU (       d-  U(       d&  UR                  [        S/S95        [        SSU5      $ U  GHg  n	[        U	S5      =(       d    Un
U(       d#  [	        X™R
                  =(       d    S5      (       a  SO
[        U	5      nSU	R                  =(       d    U/SU	R                  /S	U
/S
U//nU(       a"  UR                  SSR                  U5      /5        U(       a  UR                  SU/5        UR                  SU(       a  SOS/SS//5        U	R                  (       d  U(       a  U	R                  =(       d    U S3OU	R                  nUR                  [        U[        SS/US9S95        U(       d  GMG  UR                  [        SU SU S3/S95        GMj     U H’  n	UR                  [        U	R                   SU	R                   3[        SS/SU	R                  /SU	R                  /SU	R                  /SU	R                  =(       d    S/SU	R
                  =(       d    S//S9S95        M”     [        SSU5      $ ) Nz2No data-model metadata is included in this design.r‘   é   z
Data Modelr5   ÚPicklistÚObjectzField API NamezField Labelz	Data TypeÚValuesú, zDefault ValuezRequired at Field DefinitionÚNozControlling FieldÚNonez FieldÚPropertyÚConfiguration©r   r   ©r!   r'   z�The field should not be configured as universally required at the field-definition level because the requirement only mandates the value for zs whose Type is r�   r�   zMetadata TypezAPI NameÚActionõ   â€”ÚNotes)r‚   r   r*   rU   rY   ÚnotesÚ_field_data_typerS   Úapi_namer„   Úextendr   rQ   Úaction)rn   rp   rs   rt   r—   rv   rw   r}   r0   rŠ   Úfield_labelÚ	data_typer   r!   s                 r   ra   ra   Ì   s0  € ð "$€FÞž%Ø�‰”lÐ/cÐ.dÑeÔfÜ˜a ¨vÓ6Ð6äˆÜ" 4¨Ó,×5°ˆÞ"-Ô1CÀDÏ*É*×JZÐXZ×1[Ñ1[‘JÔaqÐrvÓawˆ	à�t—{‘{×) cÐ*Ø˜tŸ}™}Ð-Ø˜KÐ(Ø˜)Ð$ð	
ˆö Ø�K‰K˜ 4§9¡9¨VÓ#4Ð5Ô6ÞØ�K‰K˜¨-Ð8Ô9Ø�‰à/¾±ÈÐNØ$ fÐ-ðô	
ð 48·;·;Æ#�T—[‘[×' CÐ(¨Ñ/È4Ï=É=ˆØ�‰ÜØÜ"¨J¸Ð+HÈtÑTñô	
÷ ‰:Ø�M‰MÜðUØUXÐTYÐYiÐjtÐiuÐuvðxð ñ÷ñ7 óH ˆØ�‰ÜØ×-Ñ-Ð.¨a°·±¨Ð?Ü"Ø'¨Ð9à(¨$×*<Ñ*<Ð=Ø# T§]¡]Ð3Ø! 4§;¡;Ð/Ø! 4§;¡;×#7°%Ð8Ø  $§*¡*×"5°Ð6ðñ	ñö	
ñ ô  ˜!˜\¨6Ó2Ð2r   c                óª  • U (       a  U(       d  U(       d  [        SS[        S/S9/5      $ / nU=(       d    S/ HB  nUR                  USU(       a$  UR                  5       UR                  5       :X  a  SOS/5        MD     [        SU R                   S	3/[        / S
QUS9S9/nU(       a  UR                  [        SU S3/S95        [        SSU5      $ )Né   zPicklist Configurationz/No picklist fields are included in this design.r‘   z(values from requirements)ÚYesr§   z
Configure z with exactly these values:)ÚValueÚActiveÚDefaultr«   )r$   r'   z=The default value ensures that newly created records receive z' unless the user selects another value.)r*   r   r‚   r•   r²   r   )rr   r—   rv   rw   r   Úvaluer0   s          r   rb   rb     sï   € ö ž;®&ÜØØ$ÜÐ&WÐ%XÑYÐZó
ð 	
ð
 €DØ×9Ð8Ð9Ò9ˆØ�‰�U˜E®M¸e¿k¹k»mÈ}×ObÑObÓOdÓ>d¡5ÐjnÐoÖpñ :ô 	Ø$ W×%5Ñ%5Ð$6Ð6QÐRÐSÜÒ'EÈDÑQñ	
ð€Fö Ø�‰ÜàSÐTaÐSbð c=ð =ðñô	
ô ˜!Ð5°vÓ>Ð>r   c                óÀ   • U(       a  UR                   OU nU(       d  [        SS[        SU  SU S3/S9/5      $ [        SS[        SU  SU S	U S
3SU S3S/S9/5      $ )Né   zPage Layout Configurationz-No page layout updates are specified. Expose z* according to the organization's existing z/ layout standards if the field must be visible.r‘   úAdd r>   z	) to all z page layouts.z,Recommended placement is within the primary zi details/information section alongside the existing classification fields, such as Type, where practical.zpThe field should remain editable on the layouts unless existing organizational configuration dictates otherwise.)r²   r*   r   )rt   rr   r|   rs   Úapis        r   rc   rc   3  s®   € ö &ˆ'×
Ò
¨5€CÞÜØØ'äàGÈÀwð O3Ø36°%Ð7fðhð ñðó
ð 	
ô Ø	Ø#äà˜5˜'  C 5¨	°#°°nÐEØBÀ3À%ð Hcð cð8ð	ñð
	
óð r   c                óæ  • U (       d  [        SS[        S/S9/5      $ / nU(       a  UR                  O
[        U5      nU  GH!  nUR                  =(       d    SU S3n	U(       a&  U(       a  SUR
                  =(       d    S S	U S
U S3n	[        X‡U5      n
[        X‚U5      nUR                  [        SUR                  /S9[        SU	/S9[        SU
S9[        SU/S9[        SU S3/S9/5        [        XCU5      nU(       aD  U(       a  UR
                  =(       d    S S3OSnUR                  [        S[        XÒS/US9S95        UR                  [        S/S95        GM$     [        SSU5      $ )Né   úValidation Rulez0No validation rules are included in this design.r‘   z
Prevent a z: from being saved when the business rule is not satisfied.zPrevent an Úrecordz# from being saved when its Type is z and z
 is blank.z	Rule Name)r!   r$   ÚPurposeÚFormula)r!   r&   zError MessagezError Locationú field.ÚRecordz TypeÚ	ConditionzEvaluation BehaviorÚResultr«   r¬   z{The validation rule must be active and configured without user/profile-specific exceptions so that it applies to all users.)r*   r   r²   Ú_first_custom_field_apir°   rS   Ú_validation_formulaÚ_validation_error_messager³   Ú_evaluation_rowsr‚   r   )ro   rr   rt   r—   r}   rq   r0   Ú	field_apiÚruleÚpurposeÚformulaÚerror_messageÚ	eval_rowsÚtype_headers                 r   rd   rd   X  sœ  € ö ÜØØÜÐ&XÐ%YÑZÐ[ó
ð 	
ð
 "$€FÞ$+�× Ò Ô1HÈÓ1N€IÜˆà�J‰J÷ ^Ø˜E˜7Ð"\Ð]ð 	ö ž)à˜dŸk™k×5¨XÐ6Ð6YØ�,˜e I ;¨jð:ð ô & d°zÓBˆÜ1°$¸zÓJˆØ�‰ä [¸d¿m¹m¸_ÑMÜ Y¸G¸9ÑEÜ Y°WÑ=Ü _À-ÀÑQÜÐ%5ÀeÀWÈGÐCTÐBUÑVðô	
ô % Z¸Ó?ˆ	ÞÞ?I˜TŸ[™[×4¨HÐ5°UÑ;È{ˆKØ�M‰MÜØ1Ü&Ø!,°XÐ >Ø&ññôð 	�‰ÜðBðñ÷	
ñC ôR ˜!Ð.°Ó7Ð7r   c           	     ó‚  • S[        U 5       S3/nU(       aO  UR                  U SU S35        U(       a  UR                  S[        U5       S35        O'UR                  S5        OUR                  SU S35        U(       a@  U(       a9  UR                  SU SU S	35        UR                  S
U S[        U5       S35        SU  S3/nU(       a@  U(       a9  UR                  S[        U 5       SU SU S35        UR                  SU S35        [        SU  3US9[        SU  3US9[        S/S9/n[	        SSU5      $ )NzUser creates r�   z defaults to zUser may change the value to z<User may change the value to another allowed picklist value.zUser may populate z
If Type = z, the populated z satisfies the validation rule.zIf z is blank for z, save is blocked.z	Existing zKs receive the new field according to the configured field/default behavior.zWhen z is saved with Type = z , the validation rule evaluates zA blank z prevents the save.zNew r    zANo separate automation is required for enforcing the requirement.r‘   é   zProcessing Behavior)Ú_ar‚   r“   r   r*   )	rs   rt   rv   r}   ro   r—   Únew_accountÚexistingr0   s	            r   re   re   ”  s}  € ð œ˜3›�y Ð"ð€Kö Ø×Ñ˜e˜W M°-°ÀÐBÔCÞØ×ÑÐ!>¼xÈÓ?OÐ>PÐPQÐRÕSà×ÑÐ]Õ^à×ÑÐ/°¨w°aÐ8Ô9Þ–kØ×ÑØ˜˜Ð$4°U°GÐ;ZÐ[ô	
ð 	×ÑØ�%�˜¤r¨*£~Ð&6Ð6HÐIô	
ð �C�5ÐcÐdð€Hö –kØ�‰Ø”B�s“G�9Ð2°:°,Ð>^Ð_dÐ^eÐefÐgô	
ð 	�‰˜( 5 'Ð)<Ð=Ô>ä˜t C 5˜\°;Ñ?Ü˜y¨¨Ð.¸ÑAÜØ[Ð\ñ	
ð€Fô ˜!Ð2°FÓ;Ð;r   c                óü   • SR                  U 5      R                  5       n/ nSU;   d  SU;   a  UR                  S5        OUR                  S5        U(       a  UR                  S5        [        SS[	        US	9/5      $ )
Nr�   Ú
permissionÚsharingzHNo permission sets or sharing rules are included in this implementation.zYField-level security should follow the organization's existing object-field access model.zÜThe validation rule is intended to apply to all users. Field-level security should follow the organization's existing field access model; no new permission-set changes are part of this requirement unless listed in scope.é   zSecurity and Accessr‘   )r„   r•   r‚   r*   r   )r{   ro   Úoosr$   s       r   rf   rf   À  sƒ   € Ø
�(‰(�<Ó
 ×
&Ñ
&Ó
(€CØ€JØ�sÓ˜i¨3Ó.Ø×ÑØVõ	
ð 	×ÑØgô	
ö Ø×Ñð7ô	
ô
 ˜!Ð2´\ÈZÑ5XÐ4YÓZÐZr   c                ó8  • [        S/S9/nU  H¬  n	SU	R                  =(       d    U 3SU	R                   3SU(       a  SOS 3S[        U	S	5      =(       d    U 3/n
U(       a#  U
R	                  S
SR                  U5       35        U(       a  U
R	                  SU 35        UR	                  [        SU
S95        M®     U(       a9  U (       a  U S   R                  OUnUR	                  [        SSU SU S3/S95        U H,  nUR	                  [        SSUR                   3SS/S95        M.     U HY  n	UR	                  [        U	R                  SU	R                   3SU	R                   3SU	R                  =(       d    S 3/S95        M[     [        SSU5      $ )NzDThe implementation should contain the following metadata components:r‘   zObject: zField: zType: r£   úCustom FieldzLabel: r5   zValues: r¦   z	Default: r    r   zPage Layout UpdatesrÀ   z
 to every ú page layout.rÄ   zName: zActive: YeszFormula as specified above.z
API Name: zAction: r®   é	   zDeployment Components)	r   rS   r²   rU   r‚   r„   rQ   r´   r*   )rn   ro   rp   rs   rt   r—   rv   r|   r0   rŠ   r%   rÁ   rÑ   s                r   rg   rg   Ô  s¯  € ô 	Ø^Ð_ñ	
ð€Fó
 ˆà�t—{‘{×) cÐ*Ð+Ø�d—m‘m�_Ð%Ø¦6‘Z¨~Ð>Ð?Ø”l 4¨Ó,×5°Ð6Ð7ð	
ˆö Ø�N‰N˜X d§i¡i°Ó&7Ð%8Ð9Ô:ÞØ�N‰N˜Y } oÐ6Ô7Ø�‰”l¨>À7ÑKÖLñ ö Þ$*ˆf�Q‰i× Ò °ˆØ�‰ÜØ-Ø ˜u J¨s¨e°=ÐAÐBñô	
ó ˆØ�‰ÜØ)à˜TŸ]™]˜OÐ,Ø!Ø1ðñö		
ñ ó ˆØ�‰ÜØ×*Ñ*à  §¡ Ð0Ø˜tŸ{™{˜mÐ,Ø˜tŸ{™{×3¨eÐ4Ð5ðñö		
ñ ô ˜!Ð4°fÓ=Ð=r   c                óü  • / nU(       a$  UR                  S[        U5       SU SU S35        U(       ax  U H'  nUR                  S[        U5       SU SU S35        M)     UR                  SU SU S	U S
35        UR                  SU SU S	U S35        UR                  SU S35        U(       a  UR                  SU SU S35        U(       d  U  V	s/ sH  n	SU	 3PM
     sn	=(       d    S/nSU S3U(       a  SU S3OS-   /n
U(       aJ  U
R                  SU SU SU S35        U
R                  SU SU SU SU S3	5        U
R                  S5        [        S S![        S"US#9[        S$U
S#9/5      $ s  sn	f )%NzCreate z without specifying z and verify the default is r�   r�   z with z and verify save succeeds.zAttempt to save a z with a blank z  and verify the save is blocked.zCreate/save a non-z0Verify the validation error is displayed on the rÈ   zVerify z is visible on every rã   zVerify: zDVerify the solution behaves as specified in the acceptance criteria.zVerify existing z' creation and editing continues to workz	 for non-z types.zVerify changing an existing z's Type to z
 requires z to be populated.zVerify changing a z's Type away from z allows z to remain blank.zEVerify the validation rule cannot be bypassed based on user identity.é
   zTesting StrategyzFunctional Testsr    zRegression Tests)r‚   rÙ   r*   r   )ry   rs   rt   r—   rv   r}   r|   Ú
functionalr½   ÚacÚ
regressions              r   rh   rh     sÿ  € ð €JÞØ×ÑØ”b˜“g�YÐ2°5°'Ð9TÐUbÐTcÐcdÐeô	
ö ÛˆEØ×ÑØœ"˜Z›.Ð)¨¨3¨%¨v°e°WÐ<VÐWöñ ð 	×ÑØ   ¨A¨c¨U°.ÀÀÐGgÐhô	
ð 	×ÑØ   ¨A¨c¨U°.ÀÀÐGaÐbô	
ð 	×ÑÐLÈUÈGÐSZÐ[Ô\ÞØ×Ñ˜G E 7Ð*?À¸uÀMÐRÔSÞÙ08Ó9±¨"˜  “o±Ñ9÷ 
ØRð>
ˆ
ð
 ˜3˜%ÐFÐGÞ.8ˆY�z�l 'Ñ*¸cñ	Cð€Jö Ø×ÑØ*¨3¨%¨{¸:¸,ÀjÐQVÐPWÐWhÐiô	
ð 	×ÑØ   ¨A¨c¨UÐ2DÀZÀLÐPXÐY^ÐX_Ð_pÐqô	
ð 	×ÑÐaÔbÜØ
ØäÐ!3¸ZÑHÜÐ!3¸ZÑHð	
óð ùò! :s   ÃE9c                óà   • / nU  H   nUR                  U[        XbX45      /5        M"     U H  nUR                  US/5        M     [        SS[        [	        SS/U=(       d    SS//S9S	9/5      $ )
NúNot includedé   z Acceptance Criteria TraceabilityzAcceptance CriterionzDesign Implementationz(none listed)r®   r«   )r'   )r‚   Ú_trace_implementationr*   r   r   )ry   r{   rn   ro   r|   r   rè   rŠ   s           r   ri   ri   G  sˆ   € ð €DÛˆØ�‰�RÔ.¨r¸;ÓZÐ[Ö\ñ ãˆØ�‰�T˜>Ð*Ö+ñ äØ
Ø*äÜ"Ø3Ð5LÐMØ×; ?°EÐ":Ð!;ññð	
óð r   c                óx  • [        S U 5       5      nU(       a  U R                   S3nOEU(       a  SU SUR                  5        S3OSn	U(       a  SU S3OS	n
U(       a  S
U	 3OSnSU
 U S3nSnU R                  (       a$  US-   SR	                  U R                  5      -   S-   n[        SS[        XŒ/S9/5      $ )Nc              3  ó<   #   • U H  oR                   S ;   v •  M     g7f)>   ÚFlowÚ	ApexClassÚApexTriggerN)rQ   )Ú.0rm   s     r   Ú	<genexpr>Ú#_summary_section.<locals>.<genexpr>j  s   é € Ð[ÑUZÐPQ—O‘OÐ'KÖKÒUZùs   ‚zF The design includes automation metadata in addition to configuration.z specifically for r�   Úsr5   z	A custom z7 picklist provides the controlled classification valuesz<Allowlisted Salesforce metadata implements the approved planzh, page-layout updates expose the field to users, and a validation rule enforces the business requirementzNThe solution uses standard Salesforce metadata with no Apex or Flow required. r�   zºThis design is limited to configuration and validation and does not introduce additional automation, security configuration, documentation, training, or production deployment activities.z Risks / escalations: z; é   zImplementation Summaryr‘   )Úanyr”   r•   Úrisks_or_escalationsr„   r*   r   )rl   rn   ro   rp   rs   rt   r}   Ú	uses_apexrH   Útype_bitÚ	field_bitÚvr_bitÚclosings                r   rj   rj   a  s  € ô Ñ[ÑUZÓ[Ó[€IÞà�‰ÐÐeÐfñ 	ö HRÐ'¨
 |°1°S·Y±Y³[°MÀÑCÐWYˆö ð ˜�uÐSÑTàOð 	ö ð'Ø'/ jñ2ð ð	 	ð ]Øˆk˜&˜ ð$ð 	ð
	lð ð ×"×"ØÐ4Ñ4°t·y±yÀ×A\ÑA\Ó7]Ñ]Ð`cÑcˆÜØ
Ø Ü	 'Ð!3Ñ	4Ð5óð r   c                ó:  • U R                  5       nU(       aK  US   R                  R                  5       U;   a*  US   R                  =(       d    SnSU;   a  SU S3$ SU S3$ SU;   a  gS	U;   a  g
SU;   a  U(       a  S$ S$ SU;   a  gU(       a0  US   R                  R                  5       U;   a  US   R                  $ SU;   d  SU;   a  U(       a  US   R                  $ gSU;   d  SU;   d  SU;   a  SU;   a  gSU;   d  SU;   d  SU;   a  gSU;   d  SU;   a  gg)Nr   rS   ÚpicklistzCustom z picklist fieldz fieldrt   z"Field label configured accordinglyÚdefaultz(Default value configured on the picklistÚlayoutz(Layout updates included for every layoutzLayout guidance capturedz	all usersz3Active validation rule with no user-specific bypassÚ
validationÚrequiredzValidation ruleÚblankrˆ   ÚcustomerÚmustz.Validation formula checks Type and blank fieldr½   Ú
enterprisezActive picklist valueszout of scopeznot includedrë   zCovered in the metadata plan)r•   r²   rS   )rè   rn   ro   r|   Útextrs   s         r   rí   rí   �  s:  € ð �8‰8‹:€DÞ�&˜‘)×$Ñ$×*Ñ*Ó,°Ó4Ø�Q‰i×Ñ×* (ˆØ1;¸tÓ1C�˜˜˜_Ð-Ð^È7ÐSVÐRWÐW]ÐI^Ð^Ø�$ƒØ3Ø�DÓØ9Ø�4ÓÞ=NÐ9ÐnÐTnÐnØ�dÓØDÞ�{ 1‘~×.Ñ.×4Ñ4Ó6¸$Ó>Ø˜1‰~×&Ñ&Ð&Ø�tÓ˜z¨TÓ1ÞØ˜q‘>×*Ñ*Ð*Ø Ø�$ƒ˜' T›/¨j¸DÓ.@ÀVÈtÃ^Ø?Ø�$ƒ˜,¨$Ó.°*ÀÓ2DØ'Ø˜Ó °4Ó!7ØØ)r   c                óF   • U S S R                  5       S;   a  SOSnU SU  3$ )Nr?   ÚaeiouÚanrx   r�   )r•   )ÚnounÚarticles     r   rÙ   rÙ   ®  s.   € Ø˜2˜A�h—n‘nÓ&¨'Ó1‰d°s€GØˆY�a˜�vÐÐr   c           	     ó  • U R                   UR                   UR                  UR                  =(       d    SSR                  U R                  5      SR                  S UR
                   5       5      /nSR                  U5      $ )Nr5   r�   c              3  óH   #   • U H  oR                   =(       d    S v •  M     g7f)r5   N)r°   )ró   rŠ   s     r   rô   Ú_blob.<locals>.<genexpr>º  s   é € ÐCÑ.B d—‘×!˜rÔ!Ò.Bùs   ‚ "r€   )rH   r”   r°   r„   rZ   rP   )rk   rl   r†   s      r   rR   rR   ³  sg   € à×ÑØ�‰Ø�‰Ø�‰×˜Ø�‰�×1Ñ1Ó2Ø�‰ÑC¨f×.BÒ.BÓCÓCð€Eð �9‰9�UÓÐr   c                ó|   • S H6  n[         R                  " SU S3U [         R                  5      (       d  M4  Us  $    g)N)ÚAccountÚContactÚOpportunityÚLeadÚCasez\br  )rA   r]   rD   )rq   Ú	candidates     r   rT   rT   ¿  s8   € ÛJˆ	Ü�9Š9˜˜9˜+ RÐ(¨$´·±×5Ó5ØÒñ Kð r   c                ób   • U R                  SS5      R                  SS5      R                  5       $ )NÚ__cr5   Ú_r�   )Úreplacer@   )r²   s    r   Ú_humanize_apir  Æ  s+   € Ø×Ñ˜E 2Ó&×.Ñ.¨s°CÓ8×>Ñ>Ó@Ð@r   c                ó8  • U (       a  U R                   =(       d    S SU 3OUn[        R                  " SU[        R                  5      nU(       a.  UR	                  S5      R                  5       R                  S5      $ U (       a  [        U R                  5      $ g)Nr5   r�   zA(?:field\s+)?label\s+(?:as\s+|is\s+|:)?\s*([A-Za-z][A-Za-z0-9 ]+)r?   r�   râ   )	r°   rA   r]   rD   Úgroupr@   rG   r  r²   )rŠ   rq   r	  Úms       r   rU   rU   Ê  su   € Þ+/ˆd�j‰j×˜BÐ˜q  Ñ'°T€DÜ
�	Š	ÐVÐX\Ô^`×^bÑ^bÓc€AÞØ�w‰w�q‹z×ÑÓ!×(Ñ(¨Ó-Ð-ÞÜ˜TŸ]™]Ó+Ð+Ør   c                ó�   • U R                   =(       d    SR                  5       nSU;   a  gSU;   a  gSU;   a  gSU;   a  g	S
U;   a  gg)Nr5   r   r£   ÚcheckboxÚCheckboxr-   ÚNumberÚdateÚDater	  ÚTextrâ   ©r°   r•   )rŠ   r°   s     r   r±   r±   Ô  sQ   € Ø�Z‰Z×˜2×$Ñ$Ó&€EØ�UÓØØ�UÓØØ�5ÓØØ�ƒØØ�ƒØØr   c                ón   • U (       a  U R                   =(       d    S SU 3OUnSUR                  5       ;   $ )Nr5   r�   r   r(  )rŠ   rq   r	  s      r   rY   rY   ã  s1   € Þ+/ˆd�j‰j×˜BÐ˜q  Ñ'°T€DØ˜Ÿ™›Ñ%Ð%r   c                óè  • U (       a  U R                   =(       d    S SU 3OUn[        R                  " SU[        R                  5      nU(       d  / $ [        R                  " SUR                  S5      SS9S   nUR	                  S5       Vs/ sH)  oUR                  5       (       d  M  UR                  5       PM+     nn1 S	knU Vs/ sH  oUR                  5       U;  d  M  UPM     sn$ s  snf s  snf )
Nr5   r�   zK(?:picklist\s+)?values?\s*(?:are\s+|:)?\s*([A-Za-z0-9][A-Za-z0-9 ,/\-]{2,})z[.;]r?   )Úmaxsplitr   Ú,>   ÚnoÚyesÚnoneúthe following picklist values)r°   rA   r]   rD   Úsplitr  r@   r•   )rŠ   rq   r	  r   ÚrawÚvr—   Úskips           r   rV   rV   è  s»   € Þ+/ˆd�j‰j×˜BÐ˜q  Ñ'°T€DÜ
�	Š	ØVØÜ
�‰ó	€Aö
 Øˆ	Ü
�(Š(�7˜AŸG™G A›J°Ñ
3°AÑ
6€CØ!$§¡¨3¤Ó=¡˜A·7±7·9‹iˆa�g‰gŽi¡€FÐ=ÚA€DÙÓ7‘v�!§¡£°$Ñ!6�A‘vÑ7Ð7ùò >ùâ7s   ÂC*Â)C*ÃC/Ã!C/c                ó8  • U (       a  U R                   =(       d    S SU 3OUn[        R                  " SU[        R                  5      nU(       d&  [        R                  " SU[        R                  5      nU(       d  [	        U5      S:X  a  US   $ S $ UR                  S5      R                  5       R                  S5      nU(       aQ  U HK  nUR                  5       UR                  5       :X  d$  UR                  5       UR                  5       ;   d  MI  Us  $    U$ )Nr5   r�   z:(?:set\s+)?([A-Za-z][A-Za-z0-9 \-]+?)\s+as\s+the\s+defaultzBdefault(?:\s+value)?(?:\s+is|\s+as|:)?\s+([A-Za-z][A-Za-z0-9 \-]+)r?   r   r�   )	r°   rA   r]   rD   rF   r  r@   rG   r•   )rŠ   rq   r—   r	  r   r  r½   s          r   rW   rW   ÷  sà   € ö ,0ˆd�j‰j×˜BÐ˜q  Ñ'°T€DÜ
�	Š	ØEØÜ
�‰ó	€Aö
 Ü�IŠIØQØÜ�D‰Dó
ˆö
 Ü ›K¨1Ó,ˆv�a‰yÐ6°$Ð6Ø—‘˜“
× Ñ Ó"×)Ñ)¨#Ó.€IÞÛˆEØ�{‰{‹} 	§¡Ó 1Ó1°U·[±[³]ÀiÇoÁoÓFWÕ5WØ’ñ ð Ðr   c                óô   • [         R                  " SU [         R                  5      nU(       a.  UR                  S5      R	                  5       R                  S5      $ [         R                  " SU 5      (       a  gg )Nú$Type\s+is\s+([A-Za-z][A-Za-z0-9\-]*)r?   r�   z\bCustomer\bÚCustomer)rA   r]   rD   r  r@   rG   ©rq   r   s     r   r^   r^     sU   € Ü
�	Š	Ð9¸4ÄÇÁÓF€AÞØ�w‰w�q‹z×ÑÓ!×(Ñ(¨Ó-Ð-Ü	‡y‚y� $×'Ñ'ØØr   c                ód   • [         R                  " SU 5      nU(       a  UR                  S5      $ S $ )Nú([A-Za-z][A-Za-z0-9_]*__c)r?   )rA   r]   r  r9  s     r   rÌ   rÌ     s(   € Ü
�	Š	Ð/°Ó6€AÞˆ1�7‰7�1‹:Ð$ Ð$r   c                ót  • U R                   =(       d    SnUn[        R                  " SU5      nU(       a  UR                  S5      nUn[        R                  " SU[        R                  5      nU(       a  UR                  S5      R                  5       nU(       a  U(       a	  SU SU S3$ U(       a  SU S	3$ g
)Nr5   r;  r?   r7  zAND(
    ISPICKVAL(Type, "z"),
    ISBLANK(z)
)zISBLANK(r=   z&/* formula from acceptance criteria */)r°   rA   r]   r  rD   r@   )rÑ   rÐ   r}   r°   r   Úm_fieldÚ
local_typeÚm_types           r   rÍ   rÍ     s­   € ð
 �J‰J×˜"€EØ€EÜ�iŠiÐ5°uÓ=€GÞØ—‘˜aÓ ˆØ€JÜ�YŠYÐ>ÀÄrÇtÁtÓL€FÞØ—\‘\ !“_×*Ñ*Ó,ˆ
Þ–eð$Ø$. <ð 0Ø ˜'ð "ðð	
ö Ø˜%˜ Ð"Ð"Ø3r   c                ór   • U(       a,  U SU SU R                   =(       d    SR                  5        S3$ U S3$ )Nz is required for r�   rÅ   zs.z is required.)rS   r•   )rÑ   rt   r}   s      r   rÎ   rÎ   8  sB   € ö Ø�Ð)¨*¨°Q¸¿¹×8OÀx×7VÑ7VÓ7XÐ6YÐY[Ð\Ð\ØˆW�MÐ"Ð"r   c                óŠ   • U (       d  / $ U SS//nU H  nUR                  XS/5        M     UR                  / SQ/ SQ/5        U$ )NÚBlankz
Block saveú
Allow save)úAny other TyperB  rC  )rD  Ú	PopulatedrC  )r‚   r³   )r}   r—   Ú_labelr   r½   s        r   rÏ   rÏ   @  sT   € ö Øˆ	Ø˜ ,Ð/Ð0€DÛˆØ�‰�Z¨Ð5Ö6ñ à‡K�Kâ5Ú9ð	
ôð €Kr   c                ó¸   • U R                   (       a  SU R                    3OSnU R                  R                  5        SU R                   SU R                   U S3$ )NrŽ   r5   r�   r�   )rS   r´   r/   rQ   r²   )rŠ   rs   s     r   r[   r[   Q  sP   € Ø"&§+§+ˆD�—‘�Ñ
°2€CØ�k‰k×ÑÓ!Ð" ! D×$6Ñ$6Ð#7°q¸¿¹¸ÈÀuÈAÐNÐNr   c                óæ   • U  Vs/ sH  o(       d  M  UPM     nnU(       d  g[        U5      S:X  a  US   $ [        U5      S:X  a  US    SUS    3$ SR                  US S 5       SUS    3$ s  snf )	Nr5   r?   r   rž   z or r¦   éÿÿÿÿz, or )rF   r„   )r—   r3  Úvalss      r   r“   r“   V  s€   € ÙÓ#‘v�!£�A‘v€DÐ#ÞØÜ
ˆ4ƒy�Aƒ~Ø�A‰wˆÜ
ˆ4ƒy�Aƒ~Ø�q‘'�˜$˜t A™w˜iÐ(Ð(Ø�i‰i˜˜S˜b˜	Ó"Ð# 5¨¨b©¨
Ð3Ð3ùò $s
   …	A.’A.c                óŽ  • / SQnU R                    H!  nUR                  S[        U5       S35        M#     UR                  S5        U R                   HL  nUR                  S5        U H!  nUR                  S[        U5       S35        M#     UR                  S5        MN     UR	                  SS	/5        S
R                  U5      $ )N)z<table>z<tbody>ú<tr>z<th><p>z	</p></th>z</tr>rL  z<td><p>z	</p></td>z</tbody>z</table>r€   )r   r‚   r�   r   r³   r„   )r'   ÚlinesÚheaderÚrowÚcells        r   rƒ   rƒ   a  s¥   € Ú*€EØ—-”-ˆØ�‰�wœt F›|˜n¨IÐ6Ö7ñ  à	‡L�L�ÔØ�zŒzˆØ�‰�VÔÛˆDØ�L‰L˜7¤4¨£: ,¨iÐ8Ö9ñ à�‰�WÖñ	 ð
 
‡L�L�*˜jÐ)Ô*Ø�9‰9�UÓÐr   c                óP   • [         R                  " [        U =(       d    S5      SS9$ )Nr5   T)Úquote)ÚhtmlrC   r.   )r½   s    r   r�   r�   o  s   € Ü�;Š;”s˜5Ÿ; BÓ'¨tÑ4Ð4r   )rH   r.   r7   r.   r8   r,   Úreturnr.   )rk   r   rl   r	   rT  r2   )r…   r2   rT  r.   )rk   r   rl   r	   rs   r.   rt   r.   r}   r    rw   rX   rT  r*   )rl   r	   rk   r   rT  r   )ry   úSequence[str]r{   rU  rT  r*   )rn   úList[MetadataPlanItem]rp   rV  rs   r.   rt   r.   r—   r   rv   r    rw   rX   r}   r    rT  r*   )
rr   úOptional[MetadataPlanItem]r—   r   rv   r    rw   rX   rT  r*   )
rt   r.   rr   rW  r|   rX   rs   r.   rT  r*   )ro   rV  rr   rW  rt   r.   r—   r   r}   r    rq   r.   rT  r*   )rs   r.   rt   r.   rv   r    r}   r    ro   rV  r—   r   rT  r*   )r{   rU  ro   rV  rT  r*   )rn   rV  ro   rV  rp   rV  rs   r.   rt   r.   r—   r   rv   r    r|   rX   rT  r*   )ry   rU  rs   r.   rt   r.   r—   r   rv   r    r}   r    r|   rX   rT  r*   )ry   rU  r{   rU  rn   rV  ro   rV  r|   rX   rT  r*   )rl   r	   rn   rV  ro   rV  rp   rV  rs   r.   rt   r.   r}   r    rT  r*   )
rè   r.   rn   rV  ro   rV  r|   rX   rT  r.   )r  r.   rT  r.   )rk   r   rl   r	   rT  r.   )rq   r.   rT  r.   )r²   r.   rT  r.   )rŠ   rW  rq   r.   rT  r.   )rŠ   r
   rT  r.   )rŠ   rW  rq   r.   rT  rX   )rŠ   rW  rq   r.   rT  r   )rŠ   rW  rq   r.   r—   r   rT  r    )rq   r.   rT  r    )rÑ   r
   rÐ   r    r}   r    rT  r.   )rÑ   r
   rt   r.   r}   r    rT  r.   )r}   r    r—   r   rF  r.   rT  r   )r—   rU  rT  r.   )r'   r   rT  r.   )r½   rS   rT  r.   )8Ú__doc__Ú
__future__r   rS  rA   Údataclassesr   r   Útypingr   r   r   Úpackages.artifacts.designr	   r
   Úpackages.artifacts.requirementsr   r   r   r*   r2   rL   r~   r‹   r_   r’   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rí   rÙ   rR   rT   r  rU   r±   rY   rV   rW   r^   rÌ   rÍ   rÎ   rÏ   r[   r“   rƒ   r�   r   r   r   Ú<module>r^     s  ðÙ Så "ã Û 	ß (ß +Ñ +ç FÝ @ð ÷ð ó ðð
 ÷)ð )ó ð)ð ÷=ð =ó ð=ð ÷#ð #ó ð#ð Øñ	Øðð ðð ð	ð
 	õð84Ø&ð4àð4ð ô4ônð*$LØ&ð$Làð$Lð 
ð$Lð ð	$Lð
 ð$Lð ð$Lð ô$LðNAØðAØ*>ðAàôAôðC3Ø"ðC3à!ðC3ð 
ðC3ð ð	C3ð
 ðC3ð !ðC3ð ðC3ð ðC3ð ôC3ðL?Ø'ð?àð?ð !ð?ð ð	?ð
 ô?ðB"Øð"à'ð"ð ð"ð 
ð	"ð
 ô"ðJ98Ø'ð98à'ð98ð ð98ð ð	98ð
 ð98ð ð98ð ô98ðx)<Ø	ð)<àð)<ð !ð)<ð ð	)<ð
 (ð)<ð ð)<ð ô)<ôX[ð(9>Ø"ð9>à'ð9>ð "ð9>ð 
ð	9>ð
 ð9>ð ð9>ð !ð9>ð ð9>ð ô9>ðx4Øð4à	ð4ð ð4ð ð	4ð
 !ð4ð ð4ð ð4ð ô4ðnØðàðð #ðð (ð	ð
 ðð ôð4)Øð)à"ð)ð (ð)ð "ð	)ð
 
ð)ð ð)ð ð)ð ô)ðX*Øð*à"ð*ð (ð*ð ð	*ð
 	ô*ôBô
	ôôAôôô&ô
8ðØ
$ðØ,/ðØ9Bðàôô2ô%ð
4Ø
ð4àð4ð ð4ð 	ô	4ð4#Ø
ð#Ø#&ð#Ø4Að#àô#ðØðØ'0ðØ:=ðàôô"Oô
4ôõ5r   