I have had a fascination for languages ever since I read Tolkien and discovered that he had created the Elvish languages from scratch. It was this hobby of “conlang” design that ultimately led me to become a programmer.
My first programs (written in line-oriented GW-BASIC) were intended to generate random words according to specific rules. I would then pick the most interesting ones for inclusion in whatever language it was I was designing at the time. Each program was language-specific. That is, I would choose a set of phonemes, create a set of rules for their combination, develop an orthography, and then write a program to generate valid words.
When I discovered REBOL, I realized that its dialecting capabilities would be perfect for this task, but instead of having to create a program per language, or struggle with other less-than-ideal techniques such as XML configuration files, I could simply create a REBOL dialect to describe the task.
To illustrate my Conlang Dialect, we‘ll go through the process of creating a brutally simple language. Obviously we won’t bother with grammar and syntax. We are dealing just with the sounds. We will call this simple language Na. Na has only four consonants, s k t n, and three vowels, a i u. The consonants are as one would expect, and the vowels are pronounced more or less as in Spanish.
A syllable in Na must always end with a vowel, and must begin with at least one and at most two consonants. Thus a is not a valid syllable in Na, but ta and tki are. Words can consist of any number of syllables, but we will stick with those between two and five.
The Conlang Dialect consists of three verbs, rand, rept and join. Verbs are followed by one or more arguments. Our first verb, rand, can be followed either by a string or a by a REBOL block in a specific format. When followed by a string, rand instructs the Conlang Dialect to randomly choose one of the characters from the string.
rand "aiu"
When the expression above is evaluated in the Conlang Dialect, it will result either in "a", "i", or "u". However, sometimes we want to say that one choice can occur more frequently than other choices. In the Na language, "a" is more common than either "i" or "u", which are about equally common. We can express this as follows.
rand [ 3 "a" 1 rand "iu" ]
This means that 3 out of 4 times, the evaluation of the whole statement will result in "a", otherwise it will result in the evaluation of the expression rand "iu". Thus, Conlang Dialect expression can be nested within each other, and often are.
Now that we have a way to randomly choose strings, we need a way to stitch them together. This is performed by the join verb, which takes a block containing the expressions we want to join.
join [ rand "sktn" rand [ 3 "a" 1 rand "iu" ] ]
This instructs the Conlang Dialect to take the result of the two expressions inside of the block and combine them. So, for instance, we could get results like "ki" and "su" from the whole expression above.
The last verb in our repertoire is rept. This verb takes three arguments, and is best illustrated with an example.
rept 1 3 join [ rand "sktn" rand [ 3 "a" 1 rand "iu" ] ]
The first two arguments of rept tell the Conlang Dialect to repeat the evaluation of the expression given in the third argument from one to three times, in this case. In other words, pick a random number between 1 and 3 and execute the join expression that number of times, stitching the result together. The result of this expression could be words such as "ka", "kasiki", "sita", and so on.
This is all we need to create the Conlang Dialect, but unfortunately it has some drawbacks. It would be nice if we could assign expressions to names and reuse them, and so we can:
na: [ consonant: rand "sktn" onset: rand [ 3 consonant 1 join [ consonant consonant ] ] vowel: rand [ 3 "a" 1 rand "iu" ] syllable: join [onset vowel] main: rept 1 5 syllable ]
Here we have a full specification written in the Conlang Dialect. Expressions are assigned to names using a standard REBOL set-word. It should be fairly obvious from the above example how they are used. Assigning expressions in this way is not required, with one exception: The main expression is required, as it serves as the entry point into the specification. Using named expressions makes the Conlang Dialect much more usable, so I highly encourage their use.
Each verb has a much shorter synonym, and I tend to use these exclusively.
rand | ? |
rept | * |
join | & |
Here is a full program using the Conlang Dialect to produce words in our imaginary Na language. This uses the abbreviated synonyms given above.
REBOL [ needs: [ 2.100.99.2.5 http://r3.revolucent.net/net.revolucent.conlang.v1.r 1.0.2 ] license: 'mit ] na: [ consonant: ? "sktn" onset: ? [ 3 consonant & [ consonant consonant ] ] vowel: ? [ 3 "a" ? "iu" ] syllable: & [onset vowel] main: * 1 5 syllable ] random/seed now generator: parse-conlang na words: [] while [greater? 10 length? words] [ unless find words word: generator/eval [ append words word ] ] print words
And here is a list of ten words generated by executing the program. Of course, subsequent executions are almost certain to produce a different set of words.
nkasanatana ntusnana sata sanuna kasakukana skannatu suknakaka naka natasasa kanika
WoW! That's awesome. Seems like the REBOL Language is really expressive. But I am wondering why it never gained much wider popularity?
ReplyDeleteGreat Article blockchain projects for students
DeleteIEEE Projects for Engineering Students
JavaScript Training in Chennai
Networking Projects
JavaScript Training in Chennai
I think it's because at first glance it doesn't look like much. When people first look at the language, they see things like this:
ReplyDeleteforeach x [1 2 3] [print x]
And they think, "Someone has created a pretty standard programming language in which the curly braces are replaced with square ones. Big deal." And then they never bother to dig deeper and see how truly unique REBOL really is.
Also, Rebol being a tiny company and not being Open Source is a big issue for many folks to adopt that for critical projects.
ReplyDeletenike factory
ReplyDeletenike shoes
north face jackets
fitflop sale
christian louboutin outlet
reebok shoes outlet
louis vuitton belts
kobe 8
fitflop shoes clearance
coach glasses
new balance shoes
coach handbags
fendi outlet
celine outlet
columbia sportswear outlet
gucci belts
cheap nike shoes from china
coach factory online
jordan 6 infrared
fitflop clearance
columbia clothing outlet
north face coats
mont blanc pens
abercrombie and fitch outlet
michael kors outlet online
under armour outlet stores
nike factory store
michael kors handbags
cheap north face
michael kors sale
nike high heels outlet online
nike free run
canada goose coats on sale
cheap nfl jerseys
coach outlet
under armour outlet
puma outlet
coach purses outlet
michael kors sale
north face women's jackets
christian louboutin outlet
fendi sale
ray ban sunglasses
nike shoes
20151013yxj-2
Thanks for sharing, nice blog. This is a great article. It gave me a lot of useful information. plese visit me
ReplyDeleteIDM 6.5 Build 5 kegan
Trend Micro Antivirus
Windows 7 Product Key
Adobe Illustrator CC 2016 Crack
Nike Air Max nike basketball shoes 2016 jordan shoes jordans 2016 Nike Outlet cheap nike basketball shoes mizuno wave cheap louboutin shoes red bottoms shoes on sale red sole shoes christian louboutin christian louboutin outlet louboutin outlet mbt shoes sale fitflops sale fitflop sandals mizuno shoes fitflop sale fitflop outlet cheap ray bans cheap oakley Ray Ban Wayfarer ray ban sunglasses outlet ray ban sunglasses for men oakley sunglasses outlet
ReplyDeleteIt's very informative for me.
ReplyDeletefake rolex watches
ReplyDeletemichael kors handbags
christian louboutin
pandora uk
michael kors outlet online
adidas
pandora charms sale clearance
adidas superstar trainers
nfl jerseys cheap
coach outlet online
xushengda0323
You can check certain cookies so you can concentrate on the ones you want. checkout this. From this screen you can make changes if needed or proceed to the results screen.
ReplyDeleteA friendly reminder window appears on your computer screen. downlodable torrent Just slide your thumb up and down the side of the screen.
ReplyDeleteMobilize your own team, equip your heroes and get prepared for battle. download software The interactions make the reader a true part of the storyline.
ReplyDeleteGreat Information,it has lot for stuff which is informative. Project Management MBA Capstone Project Help I will share the post with my friends.
ReplyDeleteI personally like your post, you have shared good article. harvard case solutions It will help me in great deal.
ReplyDeleteGame Reminders - Get notifications when your favorite game starts. downlodable torrent Thanks to our community of trendyful people: we love your creativity and taste.
ReplyDeleteView the Party List to see who's in a Buddy's party and maybe add new Buddies to your network. checkout this. "-Dean | 2/27/2010"I dedicated myself to RST 3 months ago and shot my 3 lowest rounds (74,76,77) ever in my last 5 rounds played.
ReplyDeleteEach time mystery pagodas appear they are replaced at random by a new picture symbol - most often a dragon wildcard. downloadawesomethingsonline.top Want offers from some businesses, but not from others.
ReplyDeletecavaliers jerseys
ReplyDeletecheap oakley sunglasses
harden shoes
bottes ugg
adidas superstar shoes
uggs outlet
cheap jordan shoes
coach factory outlet online
ray ban sunglasses outlet
ugg boots
mt0816
NOISE: Computer - Synth Firefly - Hypnosis - Old Clock - Sine - White Noise - Keyboard Typing - Vinyl. essto.ru These can be used to test the App while you obtain MemoryTag labels.
ReplyDeleteThe Wind chill is the apparent temperature felt on exposed skin due to wind. myvirtualhome 2.3 torrent DynaFont is a registered trademark of DynaComware Taiwan, Inc.
ReplyDeleteYou can then decide which visa would be the most appropriate for you to apply for. http://downloadfreethingshere.gdn The number of photos in the library and number of filters continues to grow.
ReplyDeleteYou can access the tests at anytime and anywhere with your device. downloadwarezfromashley.club The IT security state (antivirus) of the machines is displayed.
ReplyDeleteCreates a system restore point before deleting files. downlodable torrent Arnold Schwarzenegger Ronnie Coleman Jay Cutler Dexter Jackson Lee Haney Samir Bannout Chris Dickerson Frank Zane.
ReplyDeleteThanks a lot for sharing this with all of us, I like it and we can communicate. Do you need buy app ratings and reviews. To boost app ranking and double app downloads now.
ReplyDeleteIncludes Octave and 1/3 Octave modes, with selectable decay times, as well as Peak Hold and true linear Average mode. http://downloadingisnice.gdn Participate in our competition, win and become a legend.
ReplyDeleteSwipe through multiple Fireworks at once to create exciting and amazing spectacles in the Sky ,and get Combos and Score High !Level Up to Unlock. http://downloadsoftwarefromriley.download ###Features###-An authentic Japanese style bullet curtain (danmaku) shooter experience on the iphone/itouch!-Vibrant, detailed graphics.
ReplyDeleteEven though its name is PotholeSnitch, you can snitch on more than potholes. downloadwarezfrompenelope.online Improved navigation transitions, you can now swipe back from locations to the location view.
ReplyDeleteyeezy shoes
ReplyDeleteugg outlet online
ugg boots
pandora jewelry
coach outlet store
canada goose coats
yeezy boost 350
canada goose
ralph lauren
canada goose jackets
20180109yuanyuan
Described as a cross between Rubik&'s Cube and Lights Out with a new twist, Rotix will satisfy your puzzle cravings. grandrelativesoftwaresagency.ga Not sure how to get to a certain point, click on "Go there" and the navigation will give you the step-by-step instructions.
ReplyDeleteThis information is very useful. thank you for sharing. and I will also share information about health through the website
ReplyDeletePengobatan Herbal Rematik/Rheumatiod Arthritis
Obat Herbal Walatra Berry Jus
Cara Mengobati Telapak Kaki Berlubang
Obat Koreng Bernanah Alami
Cara Menyembuhkan Sakit Maag Kronis
Cara Menghilangkan Stretch mark
ray ban
ReplyDeletenike air max 97
nike free
breitling watches
gucci outlet
new balance sandals
dak prescott jerseys
supra shoes
nike mercurial
nike outlet
hzx20180531
adidas outlet
ReplyDeletenike air max
manolo blahnik
parajumpers outlet
jordan 5
air jordan
nike free run
nike air max
guess
jimmy choo
2018.6.21linying
Really Awesome Blog Thanks for Sharing...
ReplyDeleteclipping path
clipping path service
background removal
car photo editing
new balance
ReplyDeleteyeezy desert rat 500
pandora jewelry
polo ralph lauren
nike air max 2018
oakley sunglasses
ugg for kids
supreme clothing
canada goose jackets
uggs official site
201810.25chenjinyan
Transportation of furniture in Medina Detection of leaks in Riyadh Detection of leaks in Riyadh Company of spray in Riyadh Cleaning of houses in Riyadh Check leaks in Riyadh Company cleaning houses in Riyadh Insulation of roofs in Riyadh
ReplyDeleteI want to tell you about a single sit original online casino sites There are many slots and slot machines. Withdrawing money is safe and fast. I play more than a month no complaints no
ReplyDelete
ReplyDeleteهل تبحث عن شركة متخصصة فى خدمات التنظيف بالدمام بافضل المعدات والسوائل وثقة تمة فى العمل ودقة فى النتائج كل هذه المميزات توفرها شركة الجنرال الشركة الافضل والامثل فى الخدمات المنزلية بالدمام وبما اننا الشركة الافضل والامثل بدون منافس سوف نسعى لتوفر افضل الخدمات باقل تكلفة وبقدر كبير من الاهتمام والدقة عزيزى اينما كنت فى اى منطقة ا وحى تابع لمدينة الدمام اتصل بنا وسوف نصلك فى الحال شركة االجنرال للخدمات المنزلية
شركة نقل عفش بالدمام
شركة تسليك مجاري بالدمام
شركة مكافحة حشرات بالدمام
شركة تنظيف منازل بالدمام ومجالس وكنب وشقق
شركة مكافحه نمل ابيض بالدمام بافضل المبيدات
شركة تنظيف مجالس وكنب بالدمام بافضل مواد التنظييف
شركة تنظيف خزانات بالدمام مع التعقيم والغسيل
شركة تنظيف سجاد بالدمام بالبخار
شركة تنظيف شقق بالدمام وفلل وقصور
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
شركة مكافحة حشرات بالدمام
ReplyDeleteشركة مكافحة حشرات بالطائف
شركة مكافحة حشرات بالرياض
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
aaشركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
شركة مكافحة حشرات بخميس مشيط
ReplyDeleteشركة مكافحة حشرات ببيشة
شركة مكافحة حشرات بحائل
شركة مكافحة حشرات بنجران
ReplyDeleteشركة مكافحة حشرات بجازان
شركة مكافحة حشرات بابها
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
شركة مكافحة حشرات بالقصيم
ReplyDeleteشركة مكافحة حشرات بينبع
شركة مكافحة حشرات بالخرج
Thank you for another excellent post. Where else could anybody get that kind of info in such a perfect way of writing? I have a presentation next week, and I am on the look for such information.
ReplyDeletegolden goose
ReplyDeletegolden goose outlet
golden goose sneakers
yeezy shoes
golden goose
golden goose outlet
supreme clothing
supreme t shirt
supreme clothing
golden goose sneakers
شركة مكافحة الارضة بجازان
ReplyDeleteشركة مكافحة الحشرات بجازان
شركة مكافحة النمل ابيض بنجران
شركات نقل عفش بخميس مشيط
شركة تنظيف منازل بخميس مشيط
شركة نقل عفش بخميس مشيط
yeezy supply
ReplyDeletegoyard
golden goose sneakers
yeezy shoes
golden goose sneakers
goyard handbags
golden goose
golden goose
adidas yeezy
golden goose
فنحن نقوم بكافة أعمال التنظيف للشقق والفلل والقصور نعمل على تنظيف كافة المنزل بداية من الأرضيات سواء كانت بلاط أو سراميك أو رخام و أيضا نقوم بتنظيف فرش الأرضيات سواء موكيت أو سجاد بأكثر من طريقة سواء باستخدام البخار أو بجهاز الرغوة الالية أو باستخدام الفرشاة الاليه. كما نقوم بتنظيف الأثاث بأجود المواد التي لا تؤثر على درجة الالوان أو حالة الأخشاب كما نقوم بتلميع الزجاج ممها بلغ ارتفاعة.
ReplyDeleteشركة غسيل موكيت بابها
شركة عزل خزانات بابها
شركة تنظيف خزانات المياه بابها
شركة تنظيف كنب بابها
شركة رش مبيدات بابها
شركة رش مبيدات بابها
شركة مكافحة الحشرات بابها
افضل شركة تنظيف منازل بخميس مشيط
ReplyDeleteشركة نقل اثاث بخميس مشيط
افضل شركة نقل عفش بخميس مشيط
شركة مكافحة النمل الابيض بجازان
تنظيف منازل بخميس مشيط
شركة نظافة بخميس مشيط
شركة مكافحة الارضة بجازان
ReplyDeleteشركة مكافحة الحشرات بجازان
شركة مكافحة النمل ابيض بنجران
شركات نقل عفش بخميس مشيط
شركة تنظيف منازل بخميس مشيط
شركة نقل عفش بخميس مشيط
I thank you for the information and articles you provided
ReplyDeleteChirurgie seins Tunisie
ReplyDeleteImplants mammaires Tunisie prix
Prix lipofilling seins Tunisie
Prix reconstruction mammaire Tunisie
Séjour médical en Tunisie
Avis chirurgie mammaire en Tunisie
chirurgie esthetique Tunisie tout compris
ReplyDeleteChirurgie esthetique Tunisie
ReplyDeleteAugmentation fesses Tunisie
Lipofilling fesses Tunisie
Lipofilling seins Tunisie
Rhinoplastie Tunisie
Augmentation mammaire Tunisie
====================================
Liposuccion Tunisie
====================================
Bypass Tunisie
Sleeve Tunisie
====================================
Abdominoplastie Tunisie
chirurgie esthetique Tunisie tout compris
ReplyDeleteHello ^^
ReplyDeleteThe season when the car winds are back.
Are you all working hard to prepare for your visit to Korea? Beware of colds and beware of corona
I came in to see your site and I liked a lot of useful and good content!
I also run a site, so will you come and see it?
I think I would be very grateful for your feedback. Bye^^
My site address: 토토사이트
I would like to thank you for the efforts you have put in writing this Magic Mesh Door Coverblog. I'm hoping the same high-grade blog post from you in the future also. Actually your creative writing abilities has inspired me to get my own screen door instant website going now. Actually blogging is spreading its wings and growing fast. Your write up is a great example 먹튀검증
ReplyDeleteThis seller is in a class of his own. He delivers consistently high quality back links with exceptionally high DA. 먹튀신고
ReplyDeleteThis is a fantastic website, thanks for sharing. There's no doubt i would fully rate it after i read what the idea about this article is 먹튀검증업체
ReplyDeleteNice Informative Blog having nice sharing.. 메이저놀이터
ReplyDelete❤ I favor the idea, such a good deal buy website traffic
ReplyDeleteGreat article and a nice way to promote online. I'm satisfied with the information that you provided 먹튀폴리스
ReplyDelete❤ I favor the idea, such a good deal 토토사이트
ReplyDeleteMua vé tại Aivivu, tham khảo
ReplyDeletegiá vé máy bay singapore hà nội
vé máy bay hà nội sài gòn vietnam airline
vé máy bay chu lai đi hà nội
vé máy bay hà nội nha trang bamboo
vé đi quy nhơn
Amazing product thanks for sharing with us It is very informative. If you need any type of boxes, you can visit the link. 먹튀검증
ReplyDeleteYou possess lifted an essential offspring..Blesss for using..I would want to study better latest transactions from this blog 안전놀이터
ReplyDeleteSomeone necessarily help to make severely articles I might state. That is the first time I frequented your web page 해외스포츠중계
ReplyDeleteAmazing product thanks for sharing with us It is very informative. 바카라사이트
ReplyDeleteI would want to study better latest transactions from this blog 토토사이트
ReplyDeleteI accidentally visited another hyperlink. I still saw several posts while visiting, but the text was neat and easy to read.
ReplyDelete먹튀검증
no deposit bonus forex 2021 - takipçi satın al - takipçi satın al - takipçi satın al - takipcialdim.com/tiktok-takipci-satin-al/ - instagram beğeni satın al - instagram beğeni satın al - google haritalara yer ekleme - btcturk - tiktok izlenme satın al - sms onay - youtube izlenme satın al - google haritalara yer ekleme - no deposit bonus forex 2021 - tiktok jeton hilesi - tiktok beğeni satın al - binance - takipçi satın al - uc satın al - finanspedia.com - sms onay - sms onay - tiktok takipçi satın al - tiktok beğeni satın al - twitter takipçi satın al - trend topic satın al - youtube abone satın al - instagram beğeni satın al - tiktok beğeni satın al - twitter takipçi satın al - trend topic satın al - youtube abone satın al - instagram beğeni satın al - tiktok takipçi satın al - tiktok beğeni satın al - twitter takipçi satın al - trend topic satın al - youtube abone satın al - instagram beğeni satın al - perde modelleri - instagram takipçi satın al - instagram takipçi satın al - cami avizesi - marsbahis - betboo
ReplyDeleteinstagram takipçi satın al
ReplyDeleteinstagram takipçi satın al
takipçi satın al
instagram takipçi satın al
instagram takipçi satın al
takipçi satın al
instagram takipçi satın al
aşk kitapları
tiktok takipçi satın al
instagram beğeni satın al
youtube abone satın al
twitter takipçi satın al
tiktok beğeni satın al
tiktok izlenme satın al
twitter takipçi satın al
tiktok takipçi satın al
youtube abone satın al
tiktok beğeni satın al
instagram beğeni satın al
trend topic satın al
trend topic satın al
youtube abone satın al
beğeni satın al
tiktok izlenme satın al
sms onay
youtube izlenme satın al
tiktok beğeni satın al
sms onay
sms onay
perde modelleri
instagram takipçi satın al
takipçi satın al
tiktok jeton hilesi
pubg uc satın al
sultanbet
marsbahis
betboo
betboo
betboo
hey! I just want to give an full-size thumbs up for the pleasant info you've got right here in this put up. 온라인슬롯
ReplyDeletetakipçi satın al
ReplyDeleteinstagram takipçi satın al
https://www.takipcikenti.com
Impressive web site, Distinguished feedback that I can tackle. Im moving forward and may apply to my current job as a pet sitter, which is very enjoyable, but I need to additional expand. Regards. 슬롯사이트
ReplyDelete
ReplyDeleteThanks for your marvelous posting! I actually enjoyed reading it, you could be
a great author.I will remember to bookmark your blog and will
eventually come back from now on. I want to encourage you to continue your great
writing, have a nice weekend!
Website:スロット
oncadaycom
ReplyDeleteGreat Post Enjoyed Reading it will come to explore more..
ReplyDeleteRegards
microsoft365.com/setup
micrsoft365.com setup
microsoft365
office365.com
www.primevideo.com/mytv
primevideo.com/mytv
123.hp.com/setup
best kashmir tour packages
kashmir honeymoon packages
kashmir tour and travel
In a rustic the place most individuals still lacked financial institution accounts or credit cards, M-Pesa provided a fast and safe means of cost. And a barrage of loosely regulated third-party lending apps that may hyperlink to M-Pesa meant bettors may indulge even when their accounts were empty. In New Jersey — which spearheaded the overturning of PASPA and is consistently battling with Nevada and New York as the highest-grossing state in sports activities betting dollars — 60 % of all bets are positioned on cell phones. In most other states with unrestricted cell betting, cell bets make up between 70 % and ninety % of all bets positioned, and between 50 % to eighty five % of them lose, stated Nower. But compared with other types of gambling, like slots or table games, sports activities bettors have a tendency begin out|to begin} younger, Fong stated, and develop addictive gambling behaviors a lot faster. The smartphone has revolutionized our relationship with know-how, together with the gambling culture 클레오카지노 of right now.
ReplyDeleteOne factor about|wonderful factor about|beauty of} ordering through Costco’s website is the speedy delivery speeds. Depending on your location and what you’re ordering, it’s possible to obtain your items inside two days or generally even get same-day delivery. Alibaba.com features as a search engine, so resellers can browse the listings that seem based on their search queries. Search results could be filtered based on selection of|quite so much of|a big selection of} standards, so you'll be able to|you probably can} slim them down based on your particular preferences. Skincare merchandise include serums, creams, dildos instruments, face masks, and supplements. Accessories are another hot buy that is perfect for this online enterprise mannequin.
ReplyDelete